redis延时队列
基本原理
利用redis的Sorted Set
有序集合数据结构实现
- 订单创建时,订单id和当前时间戳作为Sorted Set 的value和score
- 定时通过
zrangebyscore
返回指定score区间内的订单进行处理 - 通过
zrem
保证只有一个消费者能从Sorted Set中删除元素,删除成功消费者就可以执行任务了【取消未付款订单/确认收货实现
加入队列
- 启动系统时,扫描未付款/已发货未收货的订单,将订单id和创建/发货时间加入队列
- 创建订单/发货时,添加当前订单的id和时间进入队列
移除队列
- 用户在设定时间范围内完成付款/收货,从队列中移除任务
- 到达设定时间,消费者删除任务然后执行任务(取消订单/确认收货)