美文网首页并发
(3)zset实现延时队列(2)

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

作者: hedgehog1112 | 来源:发表于2020-12-10 08:01 被阅读0次

    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

    相关文章

      网友评论

        本文标题:(3)zset实现延时队列(2)

        本文链接:https://www.haomeiwen.com/subject/elekgktx.html