创建待发送记录表和发送记录表,每次短信初始化到待发送记录表,定时任务扫描待发送记录表,发送成功后从待发送记录表中删除,插入到发送记录表,发送记录表做分表处理
优化一下
把短信记录存储到redis,新增/修改的短信记录都会同步到redis。
然后,定时任务定时去扫redis,发送过的移除,同步redis。
思路没变,就是提升一下性能。
参考:
扫redis,就需要把mysql的查询条件当作key吧,例如短信的发送时间对应短信的发送信息,这样单条的缓存。或者就是一个key对应一个集合,但是这样每次需要把这个集合取出来遍历,查询符合条件的,修改发送时间和删除某一条都需要取出来遍历操作
redis发布订阅和队列支持每条记录动态时间推送吗,中途要支持修改发送时间和删除
可以做一个队列,当有新的短信进入队列时,回调发短信方法,该方法会发送队列中的短信,直到队列为空。
现在问题就是怎么动态时间进入队列
@我恰芙蓉王: 没太明白你说的“动态时间”是什么意思。发短信的发现者往队列里放入短信时就触发检查程序,检查程序把队列里的短信都发出去
@会长: 就是我早上10点设置下午3点要发1W条短信、下午4点要发2W条短信,我该在什么时候把短信放入队列
@我恰芙蓉王: 哦,原来是这样,那只能定时扫描了,可用用现成的组件Quartz.NET,我没看过它的源码,你有兴趣看看吧,可能也是定时扫描,用此组件比自己写靠谱
@会长: 还是谢谢解答
用xxljob 定时任务
可用户rabbit mq延时交换机或列信队列来实现,定时器2个小时(时间可以自己定,不用频繁的扫表)扫一次表,把还有2小时就要发送的短信放到交换机或列信队列中,延时的时间一到监听消息发送短信就行了。
优点:
好的,可以去了解一下,感谢解答