Я думал о согласованности при сохранении результатов запросов MySQL в Memcached. Что происходит с обновлениями?
При обновлении данные удаляются из Memcached.
Но... Рассмотрим следующий сценарий, в котором следующие операции выполняются в таком порядке:
- Клиент A отправляет запрос на обновление на сервер API.
- Клиент B отправляет запрос GET на сервер API.
- Оба запроса выполняются параллельно.
- Скрипт, который обрабатывает запрос клиента B, извлекает данные из БД.
- Сценарий, который обрабатывает запрос клиента A на обновление данных в БД.
- Сценарий, который обрабатывает запрос клиента А, отправляет запрос на удаление в memcached.
- Сценарий, который обрабатывает запрос клиента B, отправляет запрос на вставку в memcached.
В этом случае memcached заполняется старыми данными.
Как обеспечить согласованность в этом сценарии?