基于Redis 的任务队列Bull -- (十七)priority / lifo

之前有分析过 bull 的 priority 和 lifo 是如何实现的

当优先级为0时,lifo 为 false 意味着使用 LPUSH,lifo 为 true 意味着使用 RPUSH

当优先级不为0时,会使用 priority zset 里的优先级排序来计算 job 应该插入哪个位置

这存在一个显而易见的问题,就是 lifo 为 true 的 job 不会放在 priority zset 里

所以 lifo 为 true 的 job 会打乱优先级的排序

  -- Standard or priority add
  local priority = tonumber(ARGV[9])
  if priority == 0 then
      -- LIFO or FIFO
    rcall(ARGV[10], target, jobId) -- push to wait or paused list
  else
    -- Priority add
    rcall("ZADD", KEYS[6], priority, jobId) -- add to priority zset
    local count = rcall("ZCOUNT", KEYS[6], 0, priority)

    local len = rcall("LLEN", target)
    local id = rcall("LINDEX", target, len - (count-1))
    if id then -- means has lower priority job 
      rcall("LINSERT", target, "BEFORE", id, jobId)
    else -- no lower priority job
      rcall("RPUSH", target, j
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

afan_coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值