作者:易_拉罐 | 来源:互联网 | 2023-09-17 21:01
场景说明:
iot 设备, 设备自身不支持定时的功能, 需要服务端根据用户指定的规则下发指令到设备
举个栗子:
- 周一至周五,早上 8 点半将报警防御功能打开[出门打工了], 周六周日不用
- 周一至周五,早上 11 点半将电饭锅打开, 中午 12 点半将电饭锅设置为保温, 周六周日不用
下面是我的尝试, 不知道这个思路有什么坑 [-_-||]
我的思路:
利用 redis pub/sub 与 redis expired 功能;
具体实现:
- 将用户设置的定时规则先存入表;
- 从用户存入规则中取出最近将要执行的一条任务;
- 计算出该任务过期时间然后将任务存入 redis;
- 监听 redis 过期事件, 当有过期事件发生时, 执行该任务;
- 重复 2 -> 3 -> 4;
我认为会遇到的坑:
- 大量过期 key 同时到期会有性能问题吗?
- 集群部署同时监听过期事件如何避免重复执行?
- 用户随时可增删改规则,感觉我会写出 bug 来...
- 用户时区问题,以及夏令时冬令时问题.
经验丰富的大佬们有空帮忙瞅瞅这个设计有什么缺陷吗?
PS: 这种活讲道理确实设备端做比较合适吧
排版乱了, 我排个版面先, 辣到各位眼睛了, sorry