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出去。

 

方法四:有序集合。

有空再写

你可能感兴趣的:(redis,redis)