Skip to content

cyq1005658400/Redis-Delay-Queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Redis实现延时队列

生产者在创建一个任务之时首先保证持久化先存储到db中然后将执行时间的时间戳作为score进行判断,若执行时间小于等于当前时间则直接放到消费队列(list)中,若执行时间大于等于当前时间小于等于当前时间+预加载时间则存入未来数据队列(zset)中,否则仍然保留在db中,并且定期对db中的待消费消息进行轮询,采用这种预加载的方式可以减轻redis的压力避免阻塞,redis中的zset是复杂度为对数级别会对消息的执行时间进行排序,对于非延迟消费的消息直接放入list中进行o(1)的消费,对于延迟消费的消息则按照执行时间在zset中排序,每次在zset中取出顶部的消息的执行时间与当前时间进行比对,若小于等于当前时间则通过redis的pipeline加入到list中进行消费。

2

About

使用Redis实现延迟队列

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages