get_multi / set_multi atomic? - PullRequest
       9

get_multi / set_multi atomic?

3 голосов
/ 17 сентября 2011

В официальном 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}

Этот вопрос настолько важен для моего дизайна, что я подумал, что лучше попросить подтверждения.

1 Ответ

3 голосов
/ 17 сентября 2011

Когда я читаю этот раздел, , get_multi выдает несколько запросов, которые выполняются параллельно, идея состоит в том, что для больших запросов get_multi дает общее время, необходимое для сокращения всех результатов. , Я не вижу никакой гарантии или упоминания о том, что независимые запросы, выполненные вместе, являются коллективно атомарными. То же правило, вероятно, применимо к set_multi (то есть отдельные запросы являются атомарными, но их сбор - нет).

Похоже, что нет никаких упоминаний о транзакциях.

...