背景 最近项目中有个业务,需要对用户新增任务到期后进行业务处理.使用定时任务定时扫描过期时间,浪费资源,且不实时.只能使用延时队列处理. DelayQueue 第一想到的是java自带的延时队列delayqueue. 首先实现一个Delyed类. 实现两个最重要方法.第一个是队列里面的消息排序.DelayQueue底层使用的是阻塞队列.队列的消费端会去take队列的头部元素,没有元素就阻塞在那里.因此,延迟队列中的元素必须按执行时间顺序排列. @Override public int compa…
延迟队列的应用场景也很常见,例如:session的超时过期.自动取消未付款订单等等.redis中有一种数据结构叫做zset,即有序集合.元素类型为String类型,且元素具有唯一性不能重复,每个元素可附带float类型的score即分值.从zset中获取元素的时候可以通过分值进行排序后获取某个分值范围内的元素或所有元素. public class DelayQueue { private String redisHost = "10.5.31.155"; private int red…