Какими временными параметрами может ограничиваться срок жизни кэша?

«Какими временными параметрами может ограничиваться срок жизни кэша?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Время жизни кэша (TTL - Time To Live) задается по-разному в зависимости от его типа и реализации:

1. HTTP-кэширование (заголовки ответа сервера):

  • Cache-Control: max-age=3600 — ресурс считается свежим 3600 секунд (1 час) с момента получения.
  • Cache-Control: s-maxage=86400 — TTL для shared-кэшей (например, CDN).
  • Expires: Wed, 21 Oct 2025 07:28:00 GMT — абсолютная дата истечения срока действия (устаревший, но поддерживаемый метод).

2. Кэширование в приложениях (программное):

  • Python (functools.lru_cache с TTL):

    from functools import lru_cache
    from datetime import datetime, timedelta
    
    def ttl_cache(seconds: int, maxsize: int = 128):
        def wrapper(func):
            func.cache = {}
            func.expiry = {}
            def inner(*args):
                now = datetime.now()
                if args in func.cache:
                    if now < func.expiry[args]:
                        return func.cache[args]
                    else:
                        del func.cache[args], func.expiry[args]
                result = func(*args)
                func.cache[args] = result
                func.expiry[args] = now + timedelta(seconds=seconds)
                return result
            return inner
        return wrapper
    
    @ttl_cache(seconds=60)
    def get_expensive_data():
        # ... тяжелые вычисления
        return data
  • Redis: Установка TTL через команды EXPIRE key seconds или SET key value EX seconds.

3. CDN и Edge-кэши:

  • TTL настраивается в правилах CDN (например, 24 часа для статических ресурсов).

Выбор TTL — это баланс между актуальностью данных, нагрузкой на источник данных и производительностью.