В официальном FAQ Memcached я прочитал:
"Все отдельные команды, отправляемые в memcached, являются абсолютно атомарными."
Однако мне все еще неясно, когда речь идет о get_multi
и set_multi
. Я хотел бы знать, являются ли get_multi
и set_multi
атомарными в следующем смысле:
- Все записи, выполняемые set_multi, будут выполняться вместе атомарно.
- Все операции чтения, выполняемые get_multi, будут выполняться вместе атомарно.
Например, такие ситуации должны быть невозможны:
1) * * тысяча двадцать один
- Изначально содержимое кеша
{'a': 0, 'b': 0}
- машина А звонит
set_multi({'a': 1, 'b': 1})
- машина B звонит
get_multi(['a', 'b'])
и получает {'a': 1, 'b': 0}
2)
- Изначально содержимое кэша равно
{'a': 0, 'b': 0}
- машина A вызывает `set ({'a': 1})
- машина A вызывает `set ({'b': 2})
- машина B звонит
get_multi(['a', 'b'])
и получает {'a': 0, 'b': 2}
Этот вопрос настолько важен для моего дизайна, что я подумал, что лучше попросить подтверждения.