想要用 Redis list 实现队列,本来 list 是没有大小限制的,现在我想要固定队列大小,实现生产者消费者模型。list 有阻塞 pop,但是没有阻塞 push,请问该如何实现呢?
1
freedomshi 2019-04-11 14:13:32 +08:00
这个需求太蛋疼了,自己实现吧。
|
2
davidyanxw 2019-04-11 14:22:22 +08:00
自己实现:判断队列长度,如果超过固定大小,就阻塞
|
3
hnyoumfk 2019-04-11 16:21:24 +08:00
如果需要实现一个类似计数信号量的需求,可以参考《 Redis 实战》第六章,有详细的示例。
如果需要实现类似限流的需求,建议直接使用消息队列的模式( Redis 的 Sub/Pub ) 如果要实现队列数量有上限限制的,建议先找一下有没有支持类似功能的消息队列。 如果一定要用 Redis 实现这个功能的话,可以这么尝试: 1. 通过自定义 lua 脚本,完成 “获取队列长度,没有到达上限则添加一个元素,否则返回失败” 这个原子操作 2. 客户端调用上述 lua 脚本时,如果失败则根据业务需求选择是否稍后重试 方便的话建议详细描述一下使用这个功能的场景和业务 |