iot 设备, 设备自身不支持定时的功能, 需要服务端根据用户指定的规则下发指令到设备
下面是我的尝试, 不知道这个思路有什么坑 [-_-||]
利用 redis pub/sub 与 redis expired 功能;
1
chanlk OP 排版乱了, 我排个版面先, 辣到各位眼睛了, sorry
|
2
xlui 2021-02-07 12:27:42 +08:00 via Android
服务端定时任务就可以了吧,没看懂 redis 这一层做了什么
|
3
yejianmail 2021-02-07 12:31:10 +08:00 via Android
是的,你都扫描数据库的表了还要 redis 干啥,你这都可以直接扫出到期的任务了,你这场景应该属于消息中间件干的活
|
4
matrix67 2021-02-07 12:32:07 +08:00
估算一下服务端并发下发指令的 qps 就行
|
5
renyijiu 2021-02-07 12:43:38 +08:00
redis 的不是可靠的消息消费,想想业务能够容忍没有触发吗
|
6
cyaki 2021-02-07 12:45:34 +08:00
如果使用 Redis pub/sub, 监听程序重启 /升级过程中,会漏掉在这期间下发的消息
|
7
chanlk OP @xlui @yejianmail 你们的意思是说建定时任务不断的读表, 然后找到表中当前需要执行的任务直接遍历就去执行吗?
|
8
wizzer 2021-02-07 13:53:13 +08:00
定时任务比如 quartz xxl-job 本身就可以了
|
9
jybox 2021-02-07 13:55:24 +08:00
设计基于 Redis 的定时任务系统( ZSET + Scripting )
https://jysperm.me/2019/08/redis-cronjob-system/ |
10
godlovesxcjtest 2021-02-07 13:55:35 +08:00 via Android
用延迟消息队列啊,这个最合适了
|
12
wbf1013 2021-02-07 15:08:19 +08:00
消息队列就完事了
|
13
zoharSoul 2021-02-07 15:14:44 +08:00
扫表, 或者消息队列都行
|
16
chanlk OP @wizzer 我看了一下 quartz 这类相关的定时调度轮子, 包括 quartz xxl-job elastic job 等, 对于动态添加定时任务都是没有做原生的支持, 网上博客都是自己做了一些别的封装调用的. 再结合 quartz 的工作原理(有一个轮训所有 Trigger 的动作), 我认为这些定时任务框架是不适合我的场景的.
我的场景是大量功能相同的任务, 在不同时间点触发; 而 quartz 之类的一般都是做一些后台任务, 比如定期删删数据库的老数据, 做备份什么的; |
17
tongz 2021-02-07 16:56:10 +08:00
PHP 可以直接用 Laravel 的 schedule 实现
他的实现逻辑是 crontab 加个 * * * * *, 程序中定义执行周期, 每分钟会扫描所有程序中定义的 schedule, 遇到当前应该执行的任务就会做执行动作, 所以举个例子: $schedule->call(xxx)->dailyAt($customCron); |