提醒功能,到点推送消息给用户,用延迟队列方式解决,如果修改时间,怎么删除之前的队列?

场景:

应用里面做了日程提醒,每个用户可以自己添加自己的日程并且设置 提醒时间。到提醒时间节点,自动给用户发送一条短信或者PUSH消息。

之前是用的任务调度做的,就是每分钟抓数据库,去除当前时间节点的 日程,推送给用户。发现数据量大的时候,每分钟或者每五分钟抓一次数据库全部数据代价太大。

之后调整成:用户设置提醒时间时候,将 提醒时间 做成延迟队列。 但是用户可以编辑这个提醒时间。 比如: 当前是09:00, 用户第一次设置成 10:00 提醒(生成延迟队列 A),第二次修改 成 11:00 (B), 第三次 又还原成10:00(队列C).
当到 10:00 就会提醒两次。
我找了半天文档,没有找到删除延迟队列任务的方法。(用的 beanstalk
有想过改成 database 的 jobs 表来记录,但是总感觉别扭。
哪位兄弟有过类似的经验?请不吝赐教,感谢

凌兵
Long
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6
Long

没人有过相关的经历吗? :sob:

5年前 评论

删除队列任务的方法不是每个队列驱动都实现了的,beanstalk没有,但redis实现了。
参考:https://github.com/laravel/framework/blob/...

5年前 评论

可以看看这个,纯php实现的延迟队列,支持延迟消息删除,覆盖
https://github.com/chenlinzhong/php-delayq...

5年前 评论
bestcyt

兄弟有解决吗?我也遇到了

4年前 评论
zhengwhizz

话说,如果提醒很多的话,缓存不会爆了? 而且某些场景下有些提醒可能跨月,一直占着内存或者缓存在这之前被清除(人为或系统异常)怎么办? 兄弟有没有找到更优的解决方案?

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!