日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
謹(jǐn)防Redis防止重復(fù)點(diǎn)贊現(xiàn)象(redis重復(fù)點(diǎn)贊)

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

10年積累的網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有新興免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

點(diǎn)贊功能實(shí)現(xiàn)原理很簡單,先介紹下基本思路:

(1)用戶點(diǎn)贊時,后端調(diào)用業(yè)務(wù)邏輯在Redis緩存中增加點(diǎn)贊數(shù),并將點(diǎn)贊數(shù)據(jù)打入Redis緩存

(2)定期將Redis緩存中的點(diǎn)贊數(shù)據(jù)存入數(shù)據(jù)庫供相關(guān)業(yè)務(wù)使用。

(3)過期策略需要在Redis緩存上設(shè)置,避免意外導(dǎo)致數(shù)據(jù)丟失。

客戶端調(diào)用過程如下:

// client

# 獲取之前的點(diǎn)贊數(shù)

int amount = redis.get(“article:” + articleId + “:likes”);

# 點(diǎn)贊+1

redisClient.incr(“article:” + articleId + “:likes”);

# 新的點(diǎn)贊數(shù)

amount = redis.get(“article:” + articleId + “:likes”);

要解決重復(fù)點(diǎn)贊的問題,可以從以下幾點(diǎn)著手:

(1)在Redis緩存中記錄已點(diǎn)贊的用戶

我們可以將Redis緩存中,key為“user::liked”,value為“articleId”的鍵值對記錄入數(shù)據(jù)庫,表示該用戶已經(jīng)點(diǎn)過贊。

// client

# 檢查該用戶是否已經(jīng)點(diǎn)過贊

if (redis.exists(“user:” + userid + “:liked”){

boolean alreadyLiked = redis.get(“user:” + userId + “:liked”) == articleId;

if (alreadyLiked) {

// 已經(jīng)點(diǎn)贊,直接返回

return;

}

}

# 將當(dāng)前點(diǎn)贊情況記錄到Redis

redis.set(“user:” + userId + “:liked”, articleId);

# 點(diǎn)贊+1

redisClient.incr(“article:” + articleId + “:likes”);

(2)利用Redlock去重

Redlock是Redis實(shí)現(xiàn)的一種分布式鎖,可以實(shí)現(xiàn)多臺Redis實(shí)例的去重功能,以保證集群中的數(shù)據(jù)一致。

//client

# 嘗試獲取鎖

boolean locked = redlockClient.tryLock(“article:” + articleId + “:locked”, 1000);

if (locked) {

# 檢查該用戶是否已經(jīng)點(diǎn)過贊

if (redis.exists(“user:” + userId + “:liked”){

boolean alreadyLiked = redis.get(“user:” + userId + “:liked”) == articleId;

if (alreadyLiked) {

// 已經(jīng)點(diǎn)贊,直接釋放鎖,退出

redlockClient.unlock(lock);

return;

}

}

# 將當(dāng)前點(diǎn)贊情況記錄到Redis

redis.set(“user:” + userId + “:liked”, articleId);

# 點(diǎn)贊+1

redisClient.incr(“article:” + articleId + “:likes”);

# 釋放鎖

redlockClient.unlock(lock);

}

以上就是兩種簡單實(shí)現(xiàn)方式,能夠防止重復(fù)點(diǎn)贊的情況,滿足大多數(shù)簡單的點(diǎn)贊功能需求。當(dāng)然,對于更復(fù)雜的場景,還需要根據(jù)實(shí)際業(yè)務(wù)場景來進(jìn)一步優(yōu)化:如何使用碰撞檢測等技術(shù),避免多個篡改請求誤認(rèn)為是合法數(shù)據(jù),以此保證數(shù)據(jù)的正確性。

Redis在實(shí)現(xiàn)點(diǎn)贊功能時,需要注意避免重復(fù)點(diǎn)贊。除了基本思路中提及的技術(shù)外,還可以利用碰撞檢測技術(shù),對點(diǎn)贊請求進(jìn)行細(xì)節(jié)處理,保證所有請求的合法性。

四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機(jī)租用。成都機(jī)房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)、開啟建站+互聯(lián)網(wǎng)銷售服務(wù),與企業(yè)客戶共同成長,共創(chuàng)價值。


新聞名稱:謹(jǐn)防Redis防止重復(fù)點(diǎn)贊現(xiàn)象(redis重復(fù)點(diǎn)贊)
標(biāo)題來源:http://www.5511xx.com/article/djcopep.html