В официальном 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}
Этот вопрос настолько важен для моего дизайна, что я подумал, что лучше попросить подтверждения.