redis 队列推送消息的疑问🤔️

2019 年 5 月 9 日
 uoddsa

有个需求,需要对系统的用户进行全局推送,包含定时推送。 因为怕重复推送了所以打算是待推送的任务发在 redis list 里面。定时任务去队列取未推送的任务。可是每次取多少,怎么取。 还是我要用发布订阅。

8144 次点击
所在节点    PHP
29 条回复
runnerlee
2019 年 5 月 9 日
忘了补充一个细节,

在用 lua 调用 lpop 之后, 会将消息 json decode 出来然后自增 attempts 字段, 再放到备份队列.

https://github.com/laravel/framework/blob/5.8/src/Illuminate/Queue/LuaScripts.php#L62

这样是为了实现最大重试次数, 当失败到配置的最大次数之后, 会把消息保存到 mysql 后从 redis 里丢弃掉.
fishioon
2019 年 5 月 9 日
可以考虑下 redis 5.0 中的 stream 结构
ihipop
2019 年 5 月 9 日
NSQ
scnace
2019 年 5 月 10 日
di.....disque ?
zk123
2019 年 5 月 10 日
发布订阅模式的数据可靠性不保证,它的数据不保存到快照或者 aof 中,发布即焚,也没有 ack 机制,不适用这样消息队列场景。

List 队列模式比较适合,不过自己要补偿做许多 ack 以及失败机制。建议还是考虑 MQ 或者其他 push。
zchlwj
2019 年 5 月 10 日
redis 消息队列不存盘的哦,这种场景还是考虑 mq 把
polebug
2019 年 5 月 10 日
我上次写业务 也是用的 zset 慢点无所谓 反正并发推送
fuxinya
2019 年 5 月 10 日
如果是 spring 项目可以去看看 redisson
ducklyl
2019 年 5 月 10 日
别用 redis 做队列,用 mq 或 rq

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

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

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

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

© 2021 V2EX