`
andyou2012
  • 浏览: 8285 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

阅读更多
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花费
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics