2016-12-23 25 views
3

我正試圖瞭解如何在Redis中使用BRPOP。我們使用Redis作爲後臺工作人員的消息隊列。一個Web進程將LPUSHs發送給Redis列表,並由工作人員用BRPOP接收。如何在Redis中實施BRPOP?

BRPOP(和其他列表命令)的'阻塞'方面避開了我:在這種情況下阻塞是否意味着Redis保持在BRPOP上等待給定列表的內部有序客戶列表,並且僅發送1列出項目給一個客戶?所以每次彈出時,單個客戶端都會獲取一個列表項目,並且該項目將被刪除。

某些Redis文檔似乎在連接級別表示'阻塞',如果屬實,似乎多個客戶端無法同時對給定列表進行brpop。

回答

5

是的,Redis會按照他們一直在等待某個特定列表的時間順序維護客戶列表。爲了更清楚起見,請閱讀BLPOP的文檔,該文檔以與BRPOP相同的方式實現。

「如果同一個密鑰阻塞了多個客戶端,則第一個要等待更多時間的客戶端(第一個阻塞該密鑰的客戶端)一旦客戶端解除阻塞,它不會保留任何優先級,當它再次阻止BLPOP的下一次調用時,它將被相應地服務於已經被同一個密鑰阻塞的所有客戶端的數量,它們將在它之前被服務(從阻塞的第一個到最後一個)。「

詳細文檔: https://redis.io/commands/blpop