【问题标题】:Sidekiq - Enqueuing a job to be performed 0.seconds from nowSidekiq - 从现在开始将要执行的作业排入队列 0.seconds
【发布时间】:2026-01-26 09:30:01
【问题描述】:

我正在将 sidekiq 用于后台作业,并且我将这样的作业排入队列:

SampleJob.set(wait: waiting_time.to_i.seconds).perform_later(***) ・・・ ①

waiting_time 为零时, 它变成了

SampleJob.set(wait: 0.seconds).perform_later(***) 

当然效果很好,但我担心性能,因为等待参数排队的工人是由轮询器派生的, 所以我想知道我是否应该删除set(wait: waiting_time.to_i.seconds) waiting_time 为零。

即)

if waiting_time.present?
  SampleJob.set(wait: waiting_time.to_i.seconds).perform_later(***)
else
  SampleJob.perform_later(***)
end ・・・ ②

①和②在性能或速度上有什么不同吗? 提前谢谢你。

【问题讨论】:

    标签: ruby-on-rails ruby redis sidekiq


    【解决方案1】:

    没有区别。 Sidekiq 库中似乎已经考虑了这一点。

    https://github.com/mperham/sidekiq/blob/main/lib/sidekiq/worker.rb#L261

    # Optimization to enqueue something now that is scheduled to go out now or in the past
    @opts["at"] = ts if ts > now
    

    【讨论】:

    • 感谢您的真正有用的回答。
    • 仅适用于 Sidekiq 原生作业,不适用于 ActiveJobs。