欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

延时任务-订单超时取消实现

程序员文章站 2022-07-10 12:35:00
...
1.定时任务JOB
  定时任务扫描数据库 ,不详述了。

   优点:简单易行,支持集群操作

   缺点:(1)对服务器内存消耗大。
        (2)存在延迟,比如你每隔3分钟扫描一次,那最坏的延迟时间就是3分钟。
        (3)数据量大时数据库损耗极大。

2.JDK的延迟队列DelayedQueue

     优点:效率高,任务触发时间延迟低。

     缺点:(1)服务器重启后,数据全部消失,怕宕机
          (2)集群扩展相当麻烦
          (3)因为内存条件限制的原因,比如下单未付款的订单数太多,那么很容易就出现OOM异常
          (4)代码复杂度较高
          (5)时间轮算法

3.redis缓存
   使用 redis sorted set
      利用redis的zset,zset是一个有序集合,每一个元素(member)都关联了一个score,通过score排序来取集合中的值

添加元素:ZADD key score member [[score member] [score member] …]
按顺序查询元素:ZRANGE key start stop [WITHSCORES]
查询元素score:ZSCORE key member
移除元素:ZREM key member [member …]


      优点:(1)由于使用Redis作为消息通道,消息都存储在Redis中。如果发送程序或者任务处理程序挂了,重启之后,还有重新处理数据的可能性。
     (2)做集群扩展相当方便
     (3)时间准确度高

     缺点:(1)部署redis花费