关于 redis 的 RPOPLPUSH 实现安全队列 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hellomsg
V2EX    Redis

关于 redis 的 RPOPLPUSH 实现安全队列

  •  
  •   hellomsg 2017-02-20 15:01:15 +08:00 4396 次点击
    这是一个创建于 3219 天前的主题,其中的信息可能已经有所发展或是发生改变。
    具体是从 http://redisdoc.com/list/rpoplpush.html 看到的。
    最后提到一句:“最后,还可以添加一个客户端专门用于监视备份表,它自动地将超过一定处理时限的消息重新放入队列中去(负责处理该消息的客户端可能已经崩溃),这样就不会丢失任何消息了。”
    不太明白“超过一定处理时限的消息”是如何判断的。
    这个时限是指从 rpoplpush 开始(表示开始处理)到当前的时间差?还是插入第一个列表到当前的时间差。我觉得应该是前者。如果按照前者,那这个时间差应该如何记录? rpoplpush 是原子的, list 元素也没有时间属性,只能再创建一个结构存储这个时间吗?
    6 条回复    2017-04-27 12:13:05 +08:00
    hellomsg
        1
    hellomsg  
    OP
       2017-02-20 15:06:25 +08:00
    在 rpoplpush 之前使用 lset ,更新一遍世间戳?
    holyghost
        2
    holyghost  
       2017-02-20 15:08:42 +08:00
    redis 是个缓存呀,拿来当低配版队列可以理解,但需要可靠的队列的时候,为什么不用 RabbitMQ ?
    hellomsg
        3
    hellomsg  
    OP
       2017-02-20 15:29:33 +08:00
    @holyghost 嗯,只是一不小心看到这了,就试着用一下。
    penjianfeng
        4
    penjianfeng  
       2017-02-20 16:39:21 +08:00   1
    前段时间也看到这儿,正好可以回答下,
    意思是说,理论上来说,你队列中的某个 item 操作完了的时候 会删除 lpush 进的队列的数据,但是万一没有完成或者超时或者突然程序挂掉了呢?所以你需要另外一个操作,间隔一段时间读取下 lpush 进的那个队列,然后查看这些操作是否已经完成,如果完成,干掉,没完成,要不重新放入队列要不...看你业务咯
    penjianfeng
        5
    penjianfeng  
       2017-02-20 16:40:49 +08:00
    接上,这个时间你可以存储在你的 node 中,比如说队列的这个 key 对应一个 hash,那么这个 hash 可以存储一个叫做 last_op 的时间戳,然后你的那个客户端判断时读取这个值
    zxp111
        6
    zxp111  
       2017-04-27 12:13:05 +08:00
    关于安全对列方面,我公司有更好的方法。我们公司研发了一个国产的高性能数据库 haisql_memcache,比 Redis 和 memcched 更快,比 Memcached 更多功能,支持事务,支持微线程,支持 pipeling,支持数据日志,支持掉电保护的高性能 KV 数据库,具有高并发性,性能非常快,查询性能比 memcache 快 64%,比 Redis 单核性能快,兼容 memcached 指令集,包括返回的内容和错误提示均一致,可作为一个特殊版本的服务器直接与 memcached 客户端连接。下载地址:

    http://www.haisql.net/fwzc/soft/ 可免费试用。

    我们使用了先进的 stackless 微线程架构用于数据处理,同时 haisql_memcache 支持日志功能,当服务器突然断电时造成的损失,意外关闭造成的损失,只要存在数据日志,就可以通过利用它来恢复数据,轻松排除数据库故障.在系统崩溃 /故障等情况下,可以保证数据库的一致性,从而提高了数据库的可靠性。

    产品的服务器的并发数量理论上只受限于内存的数量,因此在内存足够的情况下,可以达到并发数量无上限。

    Haisql_memcache 目前的集群方案是利用客户端 Hash,今后有更好的集群方案。客户端做了一次哈希,可以增加大量 haisql_memecache 到集群中。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2691 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 12:27 PVG 20:27 LAX 04:27 JFK 07:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86