Memcached - Являются ли операции GET и SET атомарными? - PullRequest
5 голосов
/ 29 августа 2011

Вот сценарий: простой веб-сайт, который запрашивает кэш memcached. Этот же кеш обновляется пакетным заданием каждые 10-15 минут. С этим шаблоном что-нибудь может пойти не так (например, пропустить кеш)?

Я обеспокоен всеми возможными гоночными условиями, которые могут произойти. Например, если веб-сайт выполняет операцию GET для объекта, кэшированного в memcached, в то время как этот же объект переопределяется пакетным заданием, что произойдет?

Ответы [ 3 ]

6 голосов
/ 29 августа 2011

Мой первоначальный инстинкт состоял в том, что вы должны иметь возможность читать / писать из кэша memcached без побочных эффектов (кроме возможности устаревших данных из-за условий гонки).

Часто задаваемые вопросы по memcached:

Является ли memcached атомарным? Помимо любых ошибок, которые вы можете встретить, да все Команды внутренне атомарные. Выдача нескольких комплектов одновременно не имеет никакого вреда, кроме последнего в том, что тот, который Палочки.

Не зная больше о вашей конкретной ситуации, я бы не смог посоветовать, была ли возможна потеря кеша, но я делаю обобщение, что кеш должен быть первым уровнем для поиска данных, а не единственным уровнем. ; У меня все еще была бы база данных или какой-либо другой источник позади кэша, чтобы обработать все ваши ошибки кэша.

2 голосов
/ 29 августа 2011

Если вы получите данные, это будут последние правильные данные, которые вы сохранили.

Вы никогда не получите половину обновления, так что с этой точки зрения оно является атомарным.Каждый запрос для данного ключа будет возвращать все или ничего для этого ключа.

2 голосов
/ 29 августа 2011

Вот сценарий: простой веб-сайт, который запрашивает кеш в memcached. Этот же кеш обновляется пакетным заданием каждые 10-15 минут. С этим шаблоном что-нибудь может пойти не так (например, отсутствует кеш)?

Имейте в виду, что memcached не гарантирует, что хранящиеся в нем данные всегда будут оставаться в кэше ( например, , это кэш, а не база данных). Если вы используете memcached для других данных, результаты этого запроса могут быть удалены из кэша до того, как пакетное задание повторно их вставит.

...