生产者在创建一个任务之时首先保证持久化先存储到db中然后将执行时间的时间戳作为score进行判断,若执行时间小于等于当前时间则直接放到消费队列(list)中,若执行时间大于等于当前时间小于等于当前时间+预加载时间则存入未来数据队列(zset)中,否则仍然保留在db中,并且定期对db中的待消费消息进行轮询,采用这种预加载的方式可以减轻redis的压力避免阻塞,redis中的zset是复杂度为对数级别会对消息的执行时间进行排序,对于非延迟消费的消息直接放入list中进行o(1)的消费,对于延迟消费的消息则按照执行时间在zset中排序,每次在zset中取出顶部的消息的执行时间与当前时间进行比对,若小于等于当前时间则通过redis的pipeline加入到list中进行消费。
-
Notifications
You must be signed in to change notification settings - Fork 0
cyq1005658400/Redis-Delay-Queue
About
使用Redis实现延迟队列
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published