2014-09-26 58 views
0

這是我的場景,我使用resque在redis中排隊工作,這是通常在ROR中完成的方式。我的密鑰的格式如下所示(按照我的名稱空間慣例)即使在Resque作業成功完成後,Redis鍵仍未刪除

"resque:lock:Jobs::XYZ::SomeCreator-{:my_ids=>[101]}" 

作業成功運行以完成。但關鍵仍然存在於redis中。對於某個流程,我需要再次排隊並執行相同參數的作業(關鍵將基本相同)。但似乎這份工作沒有排隊。

我的猜測是,由於密鑰已經存在於Redis中,因此它不會再次對作業進行排隊。

問題:

是resque正常(不刪除成功後completition關鍵)這種行爲?

如果是,我應該如何處理這種情況(根據最佳實踐)?

如果否,你能幫我理解發生了什麼問題嗎?

回答

0

幾個調試小時後,終於這是觀察到的行爲:

  • 我是創造就業,創造了同樣的工作與Redis的關鍵當與symbolized keys傳遞選項(參數)象徵着關鍵的參數。

實施例:

Jobs::Abc::SomeJobCreator.create({:some_ids => [101]})將創建「redis的鍵」"resque:lock:Jobs::Abc::SomeJobCreator.create({:some_ids => [101]})"(注意這個鍵是在該鍵的符號)

  • 現在,當after_perform_hook執行,它會嘗試刪除Redis密鑰,但它會使用字符串化的密鑰來搜索密鑰:"resque:lock:Jobs::Abc::SomeJobCreator-({\"some_ids\"=>[101]}"顯然不會找到這些密鑰,因爲Redis中的密鑰具有符號化參數鍵。

  • 要解決這個問題,我不得不更改調用來創建代碼中的作業,並使用像這樣的字符串化參數:Jobs::Abc::SomeJobCreator.create({'some_ids' => [101]})。這工作正常。

不確定這與Resque版本有什麼關係。由於它的舊代碼庫我還沒有更新版本。目前在Resque v1.25.2

相關問題