Ответ
Кэш решает проблему разрыва в скорости между быстрыми и медленными компонентами системы, храня часто запрашиваемые данные в более быстром и близком к потребителю хранилище.
Принцип работы: Кэш хранит копию данных. При запросе система сначала проверяет кэш («попадание»), и если данные там есть — возвращает их мгновенно. Если нет («промах») — запрашивает из медленного источника (БД, диск, внешний API), сохраняет в кэш и возвращает.
| Где применяется и примеры: | Уровень | Цель | Пример технологии |
|---|---|---|---|
| Аппаратный | Ускорение доступа CPU к памяти | L1/L2/L3 кэш процессора | |
| Операционной системы | Ускорение доступа к диску | Кэш страниц памяти (Page Cache) | |
| Веб-приложения | Снижение нагрузки на БД, ускорение ответа | Redis, Memcached | |
| Браузер/клиент | Ускорение загрузки страниц | HTTP-кэш (Cache-Control headers) | |
| CDN | Быстрая доставка контента глобально | Кэширование статических файлов |
Пример реализации на Python с Redis:
import redis
import json
cache = redis.Redis(host='localhost', port=6379, db=0)
def get_user_profile(user_id):
cache_key = f"user_profile:{user_id}"
# 1. Попытка получить из кэша
cached_data = cache.get(cache_key)
if cached_data:
return json.loads(cached_data) # Кэш-попадание
# 2. Промах кэша — запрос к БД
data = db.fetch_user_profile(user_id) # Медленная операция
# 3. Сохранение в кэш на будущее (TTL = 5 минут)
cache.setex(cache_key, 300, json.dumps(data))
return data
Ключевые trade-offs:
- Плюсы: Высокая производительность, снижение нагрузки на основное хранилище.
- Минусы: Проблема согласованности данных (устаревший кэш), дополнительные затраты на память, сложность инвалидации.