大佬们这种消息队列该如何改进?

业务需求:

根据订单信息定时发送消息。 
现在2018年3月1日16:37:51,比如要在3月2日9点发送一条,
12点发送一条,3月15日1点发送一条 ,这样的。

目前的设计:

现在我是把发送时间戳等信息放入redis hash的key中,一条条放入。
 然后crontab定时hkeys获取所有key判断出小于当前时间的就发送消息,并删掉一条。

问题:

总觉得这种设计特别不对劲,又说不上哪里不对劲。
技术思路还太菜,大佬们有什么建议吗?
PS:如果能按时间顺序排列,那就比较好了。但是新增订单的发送时间不是按顺序的。
aluckdog
浏览 392回答 3
3回答

繁花如伊

简单做的话,可以用redis的有序集。拿目标执行的时间戳作为score,每次判断的时候,只要取score最小的一条判断是否需要执行即可

冉冉说

思路并没有问题,但是队列是一种线性结构,而 Reids 的基本结果是映射表结构……所以不对劲的地方可能就在这里

繁星coding

之前做过这种需要,我们的实时性可能比你的要求高一点。我是将发的内容和时间放在了rabbitMQ里面,开了多个worker去拿取数据处理。
打开App,查看更多内容
随时随地看视频慕课网APP