Способ справиться с подобной ситуацией состоит в том, чтобы не кэшировать записи из нескольких мест или контролировать доступ каким-либо другим способом.
Простое решение этой проблемы - не делать никаких записей в кеш от ваших клиентов. Вместо этого, если вы хотите обновить значение, вы запускаете запрос на обновление значения. Если это значение получено откуда-то еще, это может работать хорошо. Если он рассчитывается или иным образом исходит от клиента, это может быть более проблематично.
Общий компонент для использования с memcache & mdash; по крайней мере, в мире PHP & mdash; является beanstalkd как процессор распределенной рабочей очереди. В этом сценарии вы можете отключить запрос «обновление кэша» как единицу работы.
Если вы выполняете операцию над записью в кеше, которая использует существующее значение в качестве входных данных, или каким-либо другим способом вводите условие гонки, если get-then-update не была атомарной операцией, альтернативой является создание единица работы, которая включает в себя старое значение и новое значение. Таким образом, любой процесс, обрабатывающий обновления, может сделать недействительным или иным образом обработать те ситуации, когда текущее значение не является ожидаемым.
Инкремент и декремент обрабатываются интерфейсом memcached, поэтому, если ваши обращения имеют такой тип (или могут быть сокращены до такого рода операций), то это также решает проблему.