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

2019-05-09 15:58:16 +08:00
 uoddsa

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

6911 次点击
所在节点    PHP
29 条回复
runnerlee
2019-05-09 19:54:43 +08:00
忘了补充一个细节,

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

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

这样是为了实现最大重试次数, 当失败到配置的最大次数之后, 会把消息保存到 mysql 后从 redis 里丢弃掉.
fishioon
2019-05-09 20:12:32 +08:00
可以考虑下 redis 5.0 中的 stream 结构
ihipop
2019-05-09 23:56:26 +08:00
NSQ
scnace
2019-05-10 00:25:47 +08:00
di.....disque ?
zk123
2019-05-10 07:59:15 +08:00
发布订阅模式的数据可靠性不保证,它的数据不保存到快照或者 aof 中,发布即焚,也没有 ack 机制,不适用这样消息队列场景。

List 队列模式比较适合,不过自己要补偿做许多 ack 以及失败机制。建议还是考虑 MQ 或者其他 push。
zchlwj
2019-05-10 08:54:43 +08:00
redis 消息队列不存盘的哦,这种场景还是考虑 mq 把
polebug
2019-05-10 09:03:58 +08:00
我上次写业务 也是用的 zset 慢点无所谓 反正并发推送
fuxinya
2019-05-10 10:13:41 +08:00
如果是 spring 项目可以去看看 redisson
ducklyl
2019-05-10 10:52:47 +08:00
别用 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