Redisson
# 延时队列
Redisson延迟队列iRDelayedQueue基于Redis中的zset实现,zset中每个元素都可以设置一个分数,代表该元素的权重,Redisson利用这一特性,将需要延迟执行的任务插入到zset中;
每次插入都会发布消息的timeout延时时间,然后客户端开启延时任务,等延时任务时间到了才去zset中通过zrangebyscore取过期消息,加入到就绪消息列表中;
就绪消息列表是个阻塞队列,有消息进入就会被监听到,可以避免对整个zset进行轮询,提高执行效率;
相比较redis优势:
- 减少消息丢失可能性:DelayedQueue中的消息会持久化;
- 消息不重复消费:每个客户端都从同一个目标队列中获取任务;