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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
消費Redis利用隊列實現(xiàn)不重復消費(redis隊列不重復)

思路:

Redis除了有專用的記錄存儲以外,還可以擔任消息隊列的角色,消費者可以通過一些操作來實現(xiàn)不重復消費。

對于普通的消息隊列,有兩種不重復消費的方法,分別是發(fā)布 / 訂閱模式和拉取 / 確認模式,但 Redis 不支持這兩種方式,它更適合必須在一個窗口中執(zhí)行的短暫任務。

那么,我們?nèi)绾问褂?Redis 實現(xiàn)不重復消費呢?可以使用Redis LIST 功能,在LIST中存儲已消費和待消費的消息,以及根據(jù)情況在有限時間內(nèi)讓消息不被重復消費,比如如下代碼:

// 首先將未消費的消息存儲到 Redis
// 將待消費的消息存放到Redis List隊列中
List MSGList = new LinkedList();
// 設置消息有效期1小時
Long timeout = 3600L;
for(String msg:wtingMessage){
// 將消息放入隊列
msgList.add(msg);
// 并設置超時時間
redisTemplate.expire(msg,timeout,TimeUnit.SECONDS);
}
redisTemplate.opsForList().rightPushAll(KEY,msgList);

接下來,我們可以使用Redis的BLPOP方法來實現(xiàn)不重復消費,將從隊列中獲取消息并在短時間內(nèi)執(zhí)行,如下代碼所示:

// 從隊列中獲取消息 
String msg = redisTemplate.opsForList().rightPop(KEY);
// 將消息可用隊列中刪除
redisTemplate.opsForList().remove(KEY,1,msg);
// 在限時之內(nèi),對消息進行消費
consumerMsg(msg);

另外,如果消息消費者沒有能在規(guī)定的時間內(nèi)消費完消息,則可以重新將消息放回隊列中,如下代碼所示:

// 消息消費沒有在規(guī)定的時間內(nèi)消費完,則可以重新將消息放回隊列中
msgList.add(msg);
// 重新設置消息的超時時間
redisTemplate.expire(msg,timeout, TimeUnit.SECONDS);
//將消息放回隊列
redisTemplate.opsForList().rightPushAll(Key, msgList);

以上就是通過 Redis 隊列實現(xiàn)不重復消費的思路。經(jīng)過以上操作,消息在有限時間內(nèi)只會被消費一次,有效地完成了實現(xiàn)不重復消費的需求。

成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應用于計算機網(wǎng)絡、設計、SEO優(yōu)化、關鍵詞排名等多種行業(yè)!


文章標題:消費Redis利用隊列實現(xiàn)不重復消費(redis隊列不重復)
當前地址:http://www.5511xx.com/article/dpeidhs.html