为了账号安全,请及时绑定邮箱和手机立即绑定

对于redis 命令 rpoplpush的疑问

对于redis 命令 rpoplpush的疑问

jeck猫 2018-10-24 12:50:52
相比lpop,这个命令主要防止消息丢失的。如果lpop一个队列,然后客户端崩溃了,这时候这个消息就丢失了。官方的描述:可以添加一个客户端专门用于监视备份表,它自动地将超过一定处理时限的消息重新放入队列中去(负责处理该消息的客户端可能已经崩溃),这样就不会丢失任何消息了。那么,怎样判断超过一定时限的消息?我目前是这样做的。1、rpoplpush 队列,比如从A导出,备份到B。2、将得到的队列zadd到一个有序集合zset里面。3、队列完成,使用命令lrem将队列移除出备份队列B。如果进行到1步骤,没有进行到2步骤,那就说明这个队列丢失了。所以我只需要定期查询B里面的队列,是否存在zset里面就行了。貌似没问题。但假如我的检测程序运行在1和2步骤之间,那么就存在误判了。避免这种情况,最好就是官方的描述:“超过一定处理时限的消息重新放入队列中”,比如一个队列,弹出来10秒之后再检测就不会出现这种情况,那么如何判断时间呢?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

自己找到答案了。另外维护一个zset。把备份队列B的队列先放入另外一个zset,隔15秒检查一次。

查看完整回答
反对 回复 2018-10-24
  • 1 回答
  • 0 关注
  • 804 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信