掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
當前在Web應用開發(fā)中,由于農(nóng)歷算法的實際應用,重復提交是一個經(jīng)常出現(xiàn)的問題之一,近年來,Redis卻可以有效地幫助我們拯救重復提交之路,下面就是Redis應對重復提交的解決方案。

使用Redis拯救重復提交之路的需要較為簡單,首先只須要在提交過程中,利用Redis的 單線程特性,實現(xiàn)原子性的數(shù)據(jù)存儲與更新,用來記錄此前的提交信息,以此來防止重復提交的產(chǎn)生,這種數(shù)據(jù)存儲可以非常方便的用Redis的哈希數(shù)據(jù)存儲方式完成,如下面的JAVA代碼所示:
“`Java
String key = “USER:SUBMITTED:”, userId;
String field = “TIMESTAMP”;
boolean locked = false;
long timeout = 1;
//嘗試使用原子操作
do{
locked = redisTemplate.opsForHash().putIfAbsent(key + userId, field, System.currentTimeMillis());
if (locked) {
if (System.currentTimeMillis() – redisTemplate.opsForHash().get(key + userId, field)
{
break;
}
}
}while (locked);
//根據(jù)locked的值判斷提交的合法性
if (locked)
{
// TODO 此處可以添加提交的業(yè)務邏輯
} else {
logger.error(“提交數(shù)據(jù)重復!”);
}
上面的代碼實現(xiàn)了一個基本功能,利用Redis在提交過程中,實現(xiàn)一個涉及到用戶ID和提交時間戳的哈希數(shù)據(jù)存儲,這樣就可以很容易地實現(xiàn)對重復提交信息的過濾,以上述Java代碼為例,提交信息重復時,會跳出do-while循環(huán)后locked值為false,從而可以較容易地把重復提交攔截下來。
Redis的解決重復提交的解決方案,在性能上也非常出色,優(yōu)先使用Redis的原子性操作,使得重復提交的數(shù)據(jù)校驗變得更加方便快捷,而且Redis客戶端與服務端之間也可以使用常用的NIO協(xié)議,傳輸數(shù)據(jù)變得更加穩(wěn)定快捷。
綜上所述,使用Redis拯救重復提交之路,可以有效解決Web應用在農(nóng)歷算法的應用場景下,重復提交的問題,讓實際應用變得更加簡單快捷,提升Web應用的性能。
香港服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流