В этом семестре я взял класс базы данных, и мы изучаем, как поддерживать согласованность кэша между СУБД и сервером кэширования, таким как memcached. Проблемы согласованности возникают, когда есть условия гонки. Например:
- Предположим, я делаю
get(key)
из кеша, и отсутствует кеш. Из-за пропуска кэша я извлекаю данные из базы данных и затем put(key,value)
в кеш.
- Но может возникнуть состояние гонки, когда какой-то другой пользователь может удалить данные, которые я выбрал из базы данных. Это удаление может произойти до того, как я введу
put
в кеш.
Таким образом, в идеале put
в кеше не должно происходить, поскольку данные больше присутствуют в базе данных.
Если запись в кэше имеет TTL, срок действия записи в кэше может истечь. Но, тем не менее, есть окно, в котором данные в кеше несовместимы с базой данных.
Я искал статьи / исследовательские работы, в которых говорилось бы о проблемах такого рода. Но я не смог найти никаких полезных ресурсов.