Redis 列表如何实现阻塞 push?

2019-04-11 12:14:42 +08:00
 0xABCD

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

14081 次点击
所在节点    Redis
4 条回复
freedomshi
2019-04-11 14:13:32 +08:00
这个需求太蛋疼了,自己实现吧。
davidyanxw
2019-04-11 14:22:22 +08:00
自己实现:判断队列长度,如果超过固定大小,就阻塞
hnyoumfk
2019-04-11 16:21:24 +08:00
如果需要实现一个类似计数信号量的需求,可以参考《 Redis 实战》第六章,有详细的示例。
如果需要实现类似限流的需求,建议直接使用消息队列的模式( Redis 的 Sub/Pub )

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

方便的话建议详细描述一下使用这个功能的场景和业务
0xABCD
2019-04-11 21:54:48 +08:00
@hnyoumfk 感谢回复,提供了不错的思路

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/554033

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX