场景说明:
iot 设备, 设备自身不支持定时的功能, 需要服务端根据用户指定的规则下发指令到设备
举个栗子:
- 周一至周五,早上 8 点半将报警防御功能打开[出门打工了], 周六周日不用
- 周一至周五,早上 11 点半将电饭锅打开, 中午 12 点半将电饭锅设置为保温, 周六周日不用
下面是我的尝试, 不知道这个思路有什么坑 [-_-||]
我的思路:
利用 redis pub/sub 与 redis expired 功能;
具体实现:
- 将用户设置的定时规则先存入表;
- 从用户存入规则中取出最近将要执行的一条任务;
- 计算出该任务过期时间然后将任务存入 redis;
- 监听 redis 过期事件, 当有过期事件发生时, 执行该任务;
- 重复 2 -> 3 -> 4;
我认为会遇到的坑:
- 大量过期 key 同时到期会有性能问题吗?
- 集群部署同时监听过期事件如何避免重复执行?
- 用户随时可增删改规则,感觉我会写出 bug 来...
- 用户时区问题,以及夏令时冬令时问题.