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

Redis 列表如何实现阻塞 push?

  •  
  •   0xABCD · 242 天前 via Android · 10750 次点击
    这是一个创建于 242 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    方便的话建议详细描述一下使用这个功能的场景和业务
        4
    0xABCD   242 天前 via Android
    @hnyoumfk 感谢回复,提供了不错的思路
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3343 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 01:05 · PVG 09:05 · LAX 17:05 · JFK 20:05
    ♥ Do have faith in what you're doing.