2012-02-28 83 views
9

我有一個計劃,該計劃將輪詢從Redis的數據存儲上的某個鍵,並做一些當值滿足一定條件。然而,我認爲定期對redis進行輪詢是非常低效的,我想知道是否有redis的「觸發」機制,當值改變並滿足條件時,觸發器將被調用。觸發器可能是一個RPC函數,或一個HTTP消息,或其他東西,所以我不需要再輪詢它,就像輪詢和中斷之間的區別。如何爲redis數據存儲實現「觸發器」?

這可能嗎?

回答

13

可以使用Redis的的Pub/Sub功能。正如你所描述的那樣,這正是你所需要的。

實質上,您將SUBSCRIBE設置爲「通道」,並且應用程序的其他部分將(PUBLISH)值更改爲該通道。您的用戶(消費者,想要了解變更的客戶)將幾乎實時得到通知。

+1

謝謝您的回答。我已閱讀Redis的Pub/Sub功能的文檔,但仍不明白在值更改時如何觸發。誰會做「酒吧」行動?沒有對價值進行輪詢,如何觸發「酒吧」行動? – ciphor 2012-02-28 09:06:49

+0

正在編寫值的客戶端應發佈值已更改。 – 2012-02-28 09:17:40

+0

@ciphor如果我明白你的問題,這個想法是改變你的應用程序邏輯,所以不是(或者除了)您的值寫入「普通」的Redis鍵,你把它寫入通道,讓每一位用戶(可以是其中之一)立即通知。 – 2012-02-28 15:44:00

0

如果你可以使用的Pub/Sub,那是最好的。如果由於某種原因不起作用,您也可以使用(影響性能的)MONITOR命令,該命令將向您發送服務器收到的每條命令。這可能不是一個好主意。

專門爲列表,你有BLPOP,這將阻止連接到一個新的項目可從列表彈出。

相關問題