Инвалидация кэша
После изменения источника старая копия становится опасной
Если данные изменились в основном хранилище, а кэш продолжает отдавать старое значение, быстрое чтение превращается в неправильное чтение. Инвалидация — это удаление или замена кэшированной копии, когда она больше не должна считаться актуальной.
Удалить или обновить
После успешной записи можно удалить соответствующий ключ. Следующее чтение получит miss, загрузит новую версию из основного источника и снова заполнит кэш. Этот подход прост и не требует вручную строить новое кэшированное представление в write-path.
1. update primary store
2. delete cache key
3. next read reloads fresh value
Другой вариант — сразу обновить кэш новым значением. Это убирает следующий miss, но приложение должно точно знать, какой вид должно иметь закэшированное представление после изменения.
Порядок операций имеет значение
Представим: база данных успешно обновилась, а удаление ключа из кэша завершилось ошибкой. В результате источник уже содержит новую версию, но читатели продолжают получать старую. Значит, операция с кэшем тоже должна иметь понятную стратегию повторных попыток и восстановления.
Обратный порядок также опасен: если сначала удалить кэш, а затем запись в основной источник не состоится, параллельный читатель может успеть снова положить в кэш старое значение.
Одно изменение может затрагивать несколько ключей
Иногда один объект участвует в разных представлениях: например, отдельная карточка товара и несколько страниц каталога. Изменение цены тогда влияет не на один ключ, а на несколько связанных записей. Чем больше таких производных представлений, тем сложнее инвалидация.