(3)zset实现延时队列(2)

1、场景:

订单超时未支付,取消订单,恢复库存

创建的订单加入redis延时队列,单独线程轮循处理过期订单,如已支付,在延时队列中删除

2、zset实现思路

    1)将消息序列化成字符串作为 zset 的 value到期处理时间score

    2)多个线程轮询zset 获取到期任务进行处理 。多线程保障可用性,并发争抢,不会被多次执行

3、代码

1)创建连接、new队列

2)生产者queue.delay()  消费者loop

4、优化

上面同一任务,可能被多个进程取到,再用 zrem 争抢,没抢到进程浪费

用 lua scripting 将 zrangebyscorezrem 挪到服务器端进行原子化操作

https://blog.csdn.net/qpatience/article/details/90718133

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。