美文网首页
利用redis的sorted set实现延时队列

利用redis的sorted set实现延时队列

作者: 望穿天堂 | 来源:发表于2019-08-22 10:42 被阅读0次

    简单写一下思路:

    1. 数据写入sorted set(zadd),socre为执行时间,key为队列名,value为数据
    2. 消费队列循环从sorted set根据score获取(zrangebyscore)小于等于当前时间的且score最小的一条数据
    3. 如果没有获取到数据,sleep一段时间(500ms)继续获取
    4. 由于sorted set没有pop,为了防止在分布式的情况下任务重复执行,所以需要进行rem操作,只有rem成功才进行执行

    此队列没有ACK保证等,所以需要自行实现
    最简单的就是catch一下异常再扔回队列,为了防止无限制重试,还应该设定最大重试次数,当达到最大重试次数时做日志收集,人工干预

    相关文章

      网友评论

          本文标题:利用redis的sorted set实现延时队列

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