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