2011-08-02 40 views
1

如果我有多個用戶通過redis發佈到某個頻道,這是如何工作的?比方說,我有一個PHP腳本在數據庫中添加一條記錄。 2個用戶都訂閱了同一個頻道,並且都同時向數據庫中輸入記錄。兩者都使用php腳本向db中提交條目,一旦完成,我使用php-redis發佈到頻道。但是,如果兩個或更多人同時進行,會發生什麼? redis是否「鎖定」第一個請求,然後「解鎖」下一個請求?Redis子/ pub多個發佈一次

+0

Redis中的所有操作都是「原子」 –

回答

4

的Redis是單線程的,因此一個指令必須發生第一,沒有必要鎖定。您通常不會注意到阻塞,因爲單個請求所花費的大部分時間都是網絡延遲,而不是實際處理命令。

0

正如你應該寫你的聽衆使得它們對於任何給定信道上可以重複的郵件不進行任何假設,他們不承擔過多個渠道的消息的任何特定的順序一個實際問題。

換句話說,如果你有多個進程產生消息給一個給定的通道,那麼你不應該假設那些會發布給定的消息,或者多個這樣的發佈者可能有比賽和發佈某種類型的副本。如果您需要這樣的語義,您可能需要使用Redis(原子)原語(如SETNX或HSETNX)來實現自己的鎖定。