新聞中心
隨著應用系統(tǒng)的發(fā)展和移動應用的流行,分布式NoSQL數(shù)據(jù)庫Redis也愈來愈受歡迎,用來實現(xiàn)點贊功能也比較常見。借助Redis,實現(xiàn)點贊功能可以很快捷、高效,但在實現(xiàn)中需要注意防止重復點贊的狀況。

10年積累的網站設計、成都網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有新興免費網站建設讓你可以放心的選擇與我們合作。
點贊功能實現(xiàn)原理很簡單,先介紹下基本思路:
(1)用戶點贊時,后端調用業(yè)務邏輯在Redis緩存中增加點贊數(shù),并將點贊數(shù)據(jù)打入Redis緩存
(2)定期將Redis緩存中的點贊數(shù)據(jù)存入數(shù)據(jù)庫供相關業(yè)務使用。
(3)過期策略需要在Redis緩存上設置,避免意外導致數(shù)據(jù)丟失。
客戶端調用過程如下:
// client
# 獲取之前的點贊數(shù)
int amount = redis.get(“article:” + articleId + “:likes”);
# 點贊+1
redisClient.incr(“article:” + articleId + “:likes”);
# 新的點贊數(shù)
amount = redis.get(“article:” + articleId + “:likes”);
要解決重復點贊的問題,可以從以下幾點著手:
(1)在Redis緩存中記錄已點贊的用戶
我們可以將Redis緩存中,key為“user::liked”,value為“articleId”的鍵值對記錄入數(shù)據(jù)庫,表示該用戶已經點過贊。
// client
# 檢查該用戶是否已經點過贊
if (redis.exists(“user:” + userid + “:liked”){
boolean alreadyLiked = redis.get(“user:” + userId + “:liked”) == articleId;
if (alreadyLiked) {
// 已經點贊,直接返回
return;
}
}
# 將當前點贊情況記錄到Redis
redis.set(“user:” + userId + “:liked”, articleId);
# 點贊+1
redisClient.incr(“article:” + articleId + “:likes”);
(2)利用Redlock去重
Redlock是Redis實現(xiàn)的一種分布式鎖,可以實現(xiàn)多臺Redis實例的去重功能,以保證集群中的數(shù)據(jù)一致。
//client
# 嘗試獲取鎖
boolean locked = redlockClient.tryLock(“article:” + articleId + “:locked”, 1000);
if (locked) {
# 檢查該用戶是否已經點過贊
if (redis.exists(“user:” + userId + “:liked”){
boolean alreadyLiked = redis.get(“user:” + userId + “:liked”) == articleId;
if (alreadyLiked) {
// 已經點贊,直接釋放鎖,退出
redlockClient.unlock(lock);
return;
}
}
# 將當前點贊情況記錄到Redis
redis.set(“user:” + userId + “:liked”, articleId);
# 點贊+1
redisClient.incr(“article:” + articleId + “:likes”);
# 釋放鎖
redlockClient.unlock(lock);
}
以上就是兩種簡單實現(xiàn)方式,能夠防止重復點贊的情況,滿足大多數(shù)簡單的點贊功能需求。當然,對于更復雜的場景,還需要根據(jù)實際業(yè)務場景來進一步優(yōu)化:如何使用碰撞檢測等技術,避免多個篡改請求誤認為是合法數(shù)據(jù),以此保證數(shù)據(jù)的正確性。
Redis在實現(xiàn)點贊功能時,需要注意避免重復點贊。除了基本思路中提及的技術外,還可以利用碰撞檢測技術,對點贊請求進行細節(jié)處理,保證所有請求的合法性。
四川成都云服務器租用托管【創(chuàng)新互聯(lián)】提供各地服務器租用,電信服務器托管、移動服務器托管、聯(lián)通服務器托管,云服務器虛擬主機租用。成都機房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務器租用、服務器托管、云服務器、虛擬主機、網站系統(tǒng)開發(fā)經驗、開啟建站+互聯(lián)網銷售服務,與企業(yè)客戶共同成長,共創(chuàng)價值。
分享文章:謹防Redis防止重復點贊現(xiàn)象(redis重復點贊)
新聞來源:http://www.dlmjj.cn/article/djcopep.html


咨詢
建站咨詢
