相比lpop,這個(gè)命令主要防止消息丟失的。如果lpop一個(gè)隊(duì)列,然后客戶端崩潰了,這時(shí)候這個(gè)消息就丟失了。官方的描述:可以添加一個(gè)客戶端專門用于監(jiān)視備份表,它自動(dòng)地將超過一定處理時(shí)限的消息重新放入隊(duì)列中去(負(fù)責(zé)處理該消息的客戶端可能已經(jīng)崩潰),這樣就不會(huì)丟失任何消息了。那么,怎樣判斷超過一定時(shí)限的消息?我目前是這樣做的。1、rpoplpush 隊(duì)列,比如從A導(dǎo)出,備份到B。2、將得到的隊(duì)列zadd到一個(gè)有序集合zset里面。3、隊(duì)列完成,使用命令lrem將隊(duì)列移除出備份隊(duì)列B。如果進(jìn)行到1步驟,沒有進(jìn)行到2步驟,那就說明這個(gè)隊(duì)列丟失了。所以我只需要定期查詢B里面的隊(duì)列,是否存在zset里面就行了。貌似沒問題。但假如我的檢測(cè)程序運(yùn)行在1和2步驟之間,那么就存在誤判了。避免這種情況,最好就是官方的描述:“超過一定處理時(shí)限的消息重新放入隊(duì)列中”,比如一個(gè)隊(duì)列,彈出來10秒之后再檢測(cè)就不會(huì)出現(xiàn)這種情況,那么如何判斷時(shí)間呢?
1 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
自己找到答案了。另外維護(hù)一個(gè)zset。把備份隊(duì)列B的隊(duì)列先放入另外一個(gè)zset,隔15秒檢查一次。
- 1 回答
- 0 關(guān)注
- 842 瀏覽
添加回答
舉報(bào)
0/150
提交
取消