Короткий ответ
Инвалидация кеша — явное удаление или обновление устаревшей записи при изменении исходных данных, чтобы пользователи не видели старые значения дольше необходимого.
Как это работает подробнее
При изменении записи в БД приложение дополнительно удаляет или перезаписывает соответствующий ключ в кеше.
Пример кода
example.py
def update_product_price(product_id: int, new_price: float):
db.update_price(product_id, new_price) # сначала БД
redis.delete(f"product:{product_id}") # потом инвалидация кешаЧто использовать на практике
- Практика. Простой способ — удалить ключ сразу после успешного обновления БД (invalidate-on-write); сложнее согласовать это при нескольких инстансах приложения и при сбоях (если удаление кеша не выполнилось, данные останутся устаревшими до истечения TTL).
Подводные камни
- Риск. Забыть инвалидировать кеш в одном из мест обновления данных; удалять кеш до коммита транзакции в БД, тогда следующий запрос может закешировать всё ещё старое значение.