赞
踩
一、业务场景
1、相关场景:
超时未支付订单,5分钟/30分钟后自动关闭
未收货订单,14天后自动收货
会员到期前3天,短信/邮件通知续费
2、场景特点:
某一事件发生后,某段时间后完成一指定事件
3、场景分析:
对于数据量小,我们可以使用定时任务,一直轮询数据,每秒查一次,取出需要被处理的数据,然后处理,也可以实现这样的操作
但是对于任务量较大,时效性较强的场景,在活动期间数据量可能达到百万甚至千万级别,面对如此庞大的数据量,如果单纯使用轮询方式,可能对数据库造成很大压力,无法满足业务要求而且性能低下
因此我们引入延时队列用于处理此类问题
二、延时队列相关方案
1、redis-zse
利用redis-zset天然的排序属性,把时间戳设置为score,消费者定时获取该执行的数据进行处理,消费者可用Python脚本实现,定时执行可以使用linux定时任务实现。
2、rabbitmq
基本原理:利用rabbitmq中的ttl
推荐阅读【RabbitMQ】一文带你搞定RabbitMQ延迟队列 一文,详细了解。
三、redis-zset + Lua脚本实现延时队列
1、实现原理
zset 自带的排序
2、基本接口
添加任务
删除任务
获取任务
<Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。