日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

思路:

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

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

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

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

接下來,我們可以使用Redis的BLPOP方法來實現(xiàn)不重復(fù)消費,將從隊列中獲取消息并在短時間內(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);
// 重新設(shè)置消息的超時時間
redisTemplate.expire(msg,timeout, TimeUnit.SECONDS);
//將消息放回隊列
redisTemplate.opsForList().rightPushAll(Key, msgList);

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

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


本文名稱:消費Redis利用隊列實現(xiàn)不重復(fù)消費(redis隊列不重復(fù))
文章來源:http://www.dlmjj.cn/article/dpeidhs.html