V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hellomsg
V2EX  ›  Redis

关于 redis 的 RPOPLPUSH 实现安全队列

  •  
  •   hellomsg · 2017-02-20 15:01:15 +08:00 · 3947 次点击
    这是一个创建于 2835 天前的主题,其中的信息可能已经有所发展或是发生改变。
    具体是从 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 和 memcached 更快,比 Memcached 更多功能,支持事务,支持微线程,支持 pipeling,支持数据日志,支持掉电保护的高性能 KV 数据库,具有高并发性,性能非常快,查询性能比 memcache 快 64%,比 Redis 单核性能快,兼容 memcached 指令集,包括返回的内容和错误提示均一致,可作为一个特殊版本的服务器直接与 memcached 客户端连接。下载地址:

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

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

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

    Haisql_memcache 目前的集群方案是利用客户端 Hash,今后有更好的集群方案。客户端做了一次哈希,可以增加大量 haisql_memecache 到集群中。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1092 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:10 · PVG 03:10 · LAX 11:10 · JFK 14:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.