Ответ
Инвалидация кэша — это процесс удаления или обновления устаревших данных в кэше для поддержания их актуальности. Выбор стратегии зависит от требований к консистентности данных и производительности.
Основные стратегии:
-
Time-To-Live (TTL)
- Описание: Каждой записи в кэше присваивается "срок жизни", по истечении которого она автоматически удаляется.
- Применение: Идеально для данных, которые могут быть неактуальными в течение короткого периода (например, погода, курсы валют, статистика).
- Пример (Redis):
import redis r = redis.Redis() # Ключ 'weather:moscow' будет удален через 600 секунд (10 минут) r.set('weather:moscow', '{"temp": 15}', ex=600)
-
Write-Through (Сквозная запись)
- Описание: Приложение записывает данные одновременно и в кэш, и в основную базу данных. Операция считается завершенной только после успеха в обоих хранилищах.
- Плюс: Гарантирует высокую консистентность данных между кэшем и БД.
- Минус: Увеличивает задержку (latency) операции записи.
-
Explicit Invalidation (Явная инвалидация)
- Описание: Это наиболее распространенный паттерн, также известный как Cache-Aside. Приложение само отвечает за удаление данных из кэша после их изменения в основной базе данных.
- Пример:
def update_user_profile(user_id, data): # 1. Обновляем данные в основной базе db.update_user(user_id, data) # 2. Явно удаляем старые данные из кэша cache.delete(f'user:{user_id}')
-
Write-Back (Отложенная запись)
- Описание: Данные сначала очень быстро пишутся в кэш, а через некоторое время или по расписанию асинхронно сохраняются в базу данных.
- Плюс: Очень низкая задержка операций записи.
- Минус: Высокий риск потери данных при сбое кэша до того, как данные были сохранены в БД.