0xABCD
V2EX  ›  Redis

Redis 列表如何实现阻塞 push?

  •  
  •   0xABCD · Apr 11, 2019 via Android · 14890 views
    This topic created in 2607 days ago, the information mentioned may be changed or developed.

    想要用 Redis list 实现队列,本来 list 是没有大小限制的,现在我想要固定队列大小,实现生产者消费者模型。list 有阻塞 pop,但是没有阻塞 push,请问该如何实现呢?

    4 replies    2019-04-11 21:54:48 +08:00
    freedomshi
        1
    freedomshi  
       Apr 11, 2019
    这个需求太蛋疼了,自己实现吧。
    davidyanxw
        2
    davidyanxw  
       Apr 11, 2019
    自己实现:判断队列长度,如果超过固定大小,就阻塞
    hnyoumfk
        3
    hnyoumfk  
       Apr 11, 2019
    如果需要实现一个类似计数信号量的需求,可以参考《 Redis 实战》第六章,有详细的示例。
    如果需要实现类似限流的需求,建议直接使用消息队列的模式( Redis 的 Sub/Pub )

    如果要实现队列数量有上限限制的,建议先找一下有没有支持类似功能的消息队列。
    如果一定要用 Redis 实现这个功能的话,可以这么尝试:
    1. 通过自定义 lua 脚本,完成 “获取队列长度,没有到达上限则添加一个元素,否则返回失败” 这个原子操作
    2. 客户端调用上述 lua 脚本时,如果失败则根据业务需求选择是否稍后重试

    方便的话建议详细描述一下使用这个功能的场景和业务
    0xABCD
        4
    0xABCD  
    OP
       Apr 11, 2019 via Android
    @hnyoumfk 感谢回复,提供了不错的思路
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2763 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 04:34 · PVG 12:34 · LAX 21:34 · JFK 00:34
    ♥ Do have faith in what you're doing.