Redis实现唯一(去重)队列

相关场景:用Redis的List做任务队列,但是有时候任务还没处理到,某些地方超时又来了一条相同的任务,但List本身是支持重复元素的,这个时候需要对队列去重。

 

方法一:同时使用List和Set。

入队列时,同时入List和Set

lpush [key] [member]
sadd [key] [member]

出队列时,判断元素是否在Set中并将其在Set中删除。若不在Set中,忽略此次出队操作。

rpop [key]
sismenber [key] [member]
srem [key] [member]

 

方法二:只使用List,但是出队后删除掉List中相同的元素。

入队列时,同时入List和Set

lpush [key] [member]

出队列时后,删除队列中相同的此次出列的元素。数字0代表移除所有为member的元素。

rpop [key]
lrem [key] 0 [member]

 

方法三:只使用List,入队前判断元素是否在队列中。

暂时没发现List中直接判断元素是否已经存在的命令,这种判断的命令可以自己用其他逻辑的代码实现。但要值得注意的是,不要先删除掉List中相同的元素后再将此元素Push进去,这样可能会导致此元素一直在队尾,没机会Pop出去。

 

方法四:有序集合。

有空再写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值