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

Ответ

Время жизни кэша (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 — это баланс между актуальностью данных, нагрузкой на источник данных и производительностью.

Ответ 18+ 🔞

Да ты посмотри, какая хуйня интересная! Время жизни кэша, или TTL, если по-умному. Это ж как срок годности у колбасы, блядь. Просрочился — в помойку, иди за новой.

Ну, смотри, как это работает в разных местах, а то ты, наверное, думаешь, везде одинаково. Хуй там!

1. Кэширование по HTTP, прямо в заголовках. Тут сервер тебе, как начальник, команды раздаёт. Смотри:

  • Cache-Control: max-age=3600 — это значит, братан, что скачанная тобой хуйня годна ровно час (3600 секунд). Как молоко, блядь. Час прошёл — всё, пора на помойку, иди обновляй.
  • Cache-Control: s-maxage=86400 — а это уже для больших, общих кэшей, типа CDN. Им можно дольше хранить, сутки, например. Ну, чтоб не дергали сервак по каждому чиху.
  • Expires: Wed, 21 Oct 2025 07:28:00 GMT — это старый дедок, который всё ещё тут болтается. Просто говорит точную дату и время, когда твои данные станут говном. Устарел метод, но его ещё понимают, ебать его в сраку.

2. Кэширование прямо в приложении, программное. Тут уже ты сам себе хозяин, сам решаешь, когда твоим данным пиздец. Смотри, как в Питоне можно прикрутить 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) # Вот, бля, функция будет кэшироваться на 60 секунд
def get_expensive_data():
    # ... тяжелые вычисления, которые ебут процессор
    return data

А в Redis вообще просто, там команды готовые: EXPIRE key seconds или SET key value EX seconds. Сказал — и забыл, через N секунд ключ сам сдохнет, красота!

3. CDN и эти ваши Edge-кэши. Тут уже настраивается в панельке управления, как бог на душу положит. Картинки, стили — можно на сутки закэшировать, чтоб со всего света не ломились. Главное — баланс найти, ёпта!

А выбор TTL — это вообще высший пилотаж, блядь. Вечный спор: то ли данные должны быть свежие, как только что с доски, то ли сервер не должен ебаться с каждым запросом. Слишком короткий TTL — сервер сдохнет. Слишком длинный — пользователи увидят хуйню устаревшую. Короче, думай головой, а не жопой!