3
在Memcached的official FAQ中我讀到:get_multi/set_multi原子?
「發送到memcached的所有單個命令都是絕對原子的。」
但是,當涉及到get_multi
和set_multi
時,這仍然不清楚。我想知道get_multi
和set_multi
是否在以下意義上的原子:
- 通過set_multi執行所有的寫操作將共同原子進行。
- get_multi執行的所有讀取都將以原子方式執行。
例如這些情況應該是不可能的:
1)
- 最初高速緩存的內容是
{'a': 0, 'b': 0}
- 機A調用
set_multi({'a': 1, 'b': 1})
- 機B調用
get_multi(['a', 'b'])
和接收{'a': 1, 'b': 0}
2)
- 最初高速緩存的內容是
{'a': 0, 'b': 0}
- 機A調用`設置({ '一個':1})
- 機A調用`設置({ 'B':2 })
- 機B調用
get_multi(['a', 'b'])
和接收{'a': 0, 'b': 2}
這個問題是隻爲我的設計很重要,我想我最好先問問˚F或確認。
我認爲你是對的。它似乎協議甚至不支持它。我錯誤地認爲庫例程與實際的緩存操作是1-1對應的。 – julkiewicz
正確。 get_multi是一個優化。在二進制協議中,您可以通過將多個對象發送到一起來進行類似的優化,但它們都是有效的單個請求。 – Dustin