2015-06-11 29 views

回答

3

由於Redis的是單線程的,還有作爲他們的「同時」發生這樣的事情,一個總是會到來的未來其他,但時機往往無法控制。

現在,如果您有兩個進程可以以某種方式進行協調,那麼您可以讓一個進程順從其他進程,直到該操作完成。如果您擔心這一點,您可以創建某種悲觀鎖定,儘管這只是一個解決方案。

所以簡短的回答是,他們會按隨機順序到達。

這就是爲什麼Redis實施MULTI命令來批量處理事務。這些交易將以原子方式應用。

+0

因此,每個命令將以隨機順序到達,這意味着您不能保證RPUSH'a'發生在RPUSH'b'之前,但Redis的單線程設計確保'a'項不與項目交錯'b'?也就是說,結果是「ab」或「ba」,但不是「a」和「b」項的合併? – sabrehagen

+1

是的,兩個操作直接衝突基本上是不可能的,但這是大多數數據庫的工作原理。不要忘記你可以'RPUSH'多個項目,一個命令是自動應用的,只有多個命令纔會散佈,並且只有當它們沒有封裝在'MULTI'語句中。 – tadman