2013-07-07 35 views
1

我想使用Redis的,但我希望能夠限制將被允許獲得一個關鍵的價值客戶端...的Redis和premissions

的想法是誰轉移「任務的主要機'以pythonic dict throgh redis的形式出現,只有一個客戶/工人被允許獲得它,不管哪個工人,只有一個工人才能得到它。

我試圖尋找一種私密溝通的方式,這樣主機將能夠給工人一把鑰匙,這將是一個uuid,這種方式只有一個工人會得到它......找不到方法雖然。

非常感謝!

+0

您是否在使用Redis的[通知系統](http://redis.io/topics/notifications)? – tjameson

回答

0

您不需要特定的權限管理即可將給定的工作負載分配給一組工作人員,以便只有一名工作人員處理一個項目:您只需要一個排隊系統。

您可以通過使用list data type以及諸如LPUSH/RPUSH的基元來排隊,並且BRPOP/BLPOP在阻塞模式下排隊,從而輕鬆地在Redis上構建一個。

您也可以重複使用的大量的現存的Python模塊/例子之一:

更新:

如果您需要查詢的回覆機制,負載上幾個工人平衡(像Gearman),這仍然可以使用Redis的(實現的,即使它可能不是最有效的方式)。

客戶端進程可以在啓動時生成UUID以識別它。然後它可以將作業推送到具有RPUSH/LPUSH的主隊列(主隊列)。這些項目應該包含有效載荷本身以及發件人的身份(UUID)。然後,客戶端只需等待隊列上的答案:UUID(BLPOP/BRPOP)。如果您想要支持流水線操作(即發送多個查詢並等待多個回覆),您需要自行識別項目(位於發件人之上),以便客戶端流程可以安全地將查詢和回覆。

工作人員只是從隊列中取出隊列:main(BLPOP/BRPOP),處理有效載荷,檢索發送者的UUID,並將結果推送到隊列:UUID(帶LPUSH/RPUSH)。如果物品已識別,請務必返回物品的身份和結果。

注意:您不需要顯式創建或刪除隊列。 Redis列表會在第一個項目被推入時自動創建,並在最後一個項目被彈出時被刪除。

+0

謝謝!redis中的列表問題是工作人員無法將結果謹慎地返回給主機。任何想法如何解決? – user2557639

+0

看我的更新... –

+0

哇!你幫了我很多!我有另一個問題...現在讓我說我想確保2件事...首先,只有主機才能得到結果。其次,一個機器/工人,只能得到一個工作/任務..一次性工作人員......非常感謝! – user2557639