首页  

延迟任务处理总结     所属分类 architecture 浏览量 1137
数据库轮询 
定时扫描,获取到需要处理的任务
优点  简单
缺点  数据库压力大 实时性不高

JDK延迟队列 DelayQueue
poll() 非阻塞获取,没有到期元素返回null  
public E poll(long timeout, TimeUnit unit)  
take() 阻塞获取 

优点 简单高效
缺点 数据存储在内存中,需要自己实现持久化方案来实现高可用 ,可能OOM

ScheduledExecutorService

Quartz定时任务

时间轮 TimingWheel
存储定时任务的环形队列
数组实现,数组中的每个元素存放一个定时任务列表
时间轮 时间格  跨度 tickMs 
时间轮个数固定  wheelSize

优点 效率高,可靠性高(Netty,Kafka使用) 
缺点 数据存储在内存中,需要自己实现持久化方案来实现高可用
kafka 为了处理大量的延时任务  使用多层时间轮


延时消息队列
RocketMQ 不支持任意时间自定义的延迟消息,仅支持内置预设值的延迟时间间隔的延迟消息。



redis zset  
score排序
zrangeWithScores  +  zrem   
先查出来 处理完后 再删除 注意并发问题

Jesque (redis zset + script)


延时任务更新时间如何实现

上一篇     下一篇
mysql中的浮点数

MongoDB面试题

MongoDB优缺点

springboot最核心的三个注解

springboot面试题

springboot自动配置原理和实例