Кэширование — не роскошь, а необходимость в современных системах, но его скрытая цена — инвалидация (сброс устаревших данных). Попытки решить проблему TTL (time-to-live) приводят к компромиссам: либо данные устаревают, либо сервис дает сбой под нагрузкой. Рассмотрим архитектурные подходы, которые обеспечивают актуальность данных без деградации производительности.
Почему TTL Fails
Допустим, у нас есть сервис профилей пользователей с Redis-кэшем:
# Наивная реализация с TTL
def get_user(user_id):
cache_key = f"user:{user_id}"
user_data = cache.get(cache_key)
if not user_data:
user_data = db.query("SELECT * FROM users WHERE id = %s", user_id)
cache.set(cache_key, user_data, ttl=300) # 5 минут
return user_data
Проблемы:
...