时间轮

实现一个循环队列,类似表盘,假设走完一圈是 8S ,每个格子指向一个任务,时间无限循环,每转到一个格子,就扫描对应格子的所有任务,把时间到期的任务取出来执行,除此之外,每个任务需要记录圈数,每转1圈就减1,减到0就取出来执行。

DelayQueue

JAVA 可以使用 DelayQueue 实现。

利用 REDIS 的健过期通知

利用 redis key 过期事件处理,收到过期健的通知之后,就是任务需要执行的时间点。

利用 REDIS 的有序集合

设置 key 为任务 id,score 为任务计划执行的时间戳,这样在加入到集合的时候已经实现排序,只需要每隔一秒钟取出 SET 顶部的数据,小于当前时间的通过 POP 取出执行。