将 Resque 队列转换为 SideKiq

6
我正在尝试将一个Resque队列转换为Sidekiq。我已经完成了Sidekiq的全部设置,现在准备将所有resque作业添加到sidekiq中。
我的问题是:我是否可以简单地将redis中的所有resque键重命名为相应的sidekiq键?
例如,如果我有一个名为“twitter”的队列,则resque的redis键为“resque:queue:twitter”,但是在sidekiq中的键将是“queue:twitter”。我是否可以简单地将“resque:queue:twitter”重命名为“queue:twitter”?

+1,因为我感觉在redis列表中没有重命名键API。期待有人能证明我错了。 - Viren
为什么不让现有的 Resque 工作进程清空它们的队列,让 Sidekiq 处理任何新的工作呢?手动转移工作不应该是必要的。 - Chris Heald
@ChrisHeald 因为这样做需要等待很长很长的时间。 - Henley
2个回答

6

好的,最终搞定了。

有一些全局命令我错过了,rename 或许就是其中之一。

你可以使用它来重命名键。

像这样做:

redis.rename "resque:queue:twitter","queue:twitter" 

请看是否有效

祝福

感谢提问,这让我重新温习了redis的知识


1

以下是我用来将我们现有的resque作业迁移到sidekiq的一些代码。您可以在Rails控制台中使用此代码。

['low', 'high', 'critical'].each do |queue|
  p [1, queue]
  old_queue = "resque:queue:#{queue}"
  new_queue = "queue:#{queue}"
  # $redis.ltrim new_queue, 0, 0 # can optionally clear out new queue, in case of multiple runs

  vals = $redis.lrange(old_queue, 0, -1)
  p [2, queue]
  $redis.pipelined do
    vals.each do |val|
      $redis.lpush(new_queue, val)
    end
  end
end

您也可以直接设置:

Sidekiq.configure_server do |config|
  config.redis = { :namespace => 'resque' }
end
Sidekiq.configure_client do |config|
  config.redis = { :namespace => 'resque' }
end

如果您使用“开箱即用”方式进行部署,它将直接运行。但是,在我没有使用此方法进行部署后,我在两种格式中都有待处理的作业,因此不得不使用我粘贴的第一个代码来迁移事物。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接