2012-12-11 61 views
6

我想將Resque隊列轉換爲Sidekiq。我已經完成了Sidekiq的整個設置,現在已準備好將所有的resque作業添加到sidekiq。將Resque隊列轉換爲SideKiq

我的問題是:我可以簡單地將redis中的所有恢復密鑰重命名爲相應的sidekiq密鑰嗎?例如,如果我有一個名爲「twitter」的隊列,resis的redis鍵是「resque:queue:twitter」,但是sidekiq中的鍵將是「queue:twitter」。我可以簡單地將「resque:queue:twitter」重命名爲「queue:twitter」嗎?

+0

+1 becoz我不覺得在'redis'列表中有重命名關鍵字api如果有人能證明我的錯誤 – Viren

+0

爲什麼不讓現有的resque工作者刷出他們現有的隊列,讓Sidekiq處理任何新的工作?手動移動工作不應該是必需的。 –

+0

@ChrisHeald因爲這樣做需要等待很長時間。 –

回答

6

好了終於有

很少有全局命令,我錯過了和rename可能是其中之一。

在這裏您可以重命名鍵如果你想

做這樣的事情

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

,看看它是否工作

乾杯

謝謝你的問題,它只是刷了通過redis知識

1

這是我用來m的一些代碼將我們現有的復古作業遷移到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 

,它會工作的開箱。但是,如果我沒有這個部署,我有這兩種格式的待工作,所以不得不使用我粘貼的第一個代碼來遷移事情。