Базовые концепции

Кеширование — это слой данных, который временно хранит информацию, к которой часто обращаются. Он не предназначен для постоянного хранения и обычно содержит лишь небольшой объем «горячих» данных.

Во многих системах нагрузка на чтение (Read) многократно превышает нагрузку на запись (Write). Оптимизируя чтение через кеш, мы снимаем огромную долю нагрузки с основной базы данных, оставляя ей больше ресурсов для записи.

  • Для кеша обычно используются key-value хранилища.
  • Они используют RAM (оперативную память) и не тратят время на дисковые I/O операции.
  • Следствие: latency (задержка) обращения к кешу в разы меньше, чем к БД.
Словарный запас инженера
  • Cache hit: Данные успешно найдены в кэше. Бэкенд сразу отдает их клиенту.
  • Cache miss: Данных в кэше нет. Бэкенду приходится идти в медленную БД, а затем (обычно) записывать свежие данные в кэш.
  • Hit ratio: Процент попаданий в кэш. Главная метрика эффективности твоего слоя кеширования.
  • Hot key: Аномально популярный ключ (например, профиль Селены Гомес в Instagram).
  • Cache warming: Искусственный предварительный «прогрев» кэша данными до того, как придет реальный пользовательский трафик.
  • Invalidation / Eviction: Инвалидация (удаление протухших данных) и Замещение (вытеснение старых данных из-за нехватки памяти).

Важно: Кеш должен помогать работе системы, но не должен становиться её критическим звеном (Point of failure). Если кеш недоступен, система обязана продолжить работу штатно (пусть и медленнее).

Где живет кеш?

От выбора расположения кеша зависит скорость, надёжность и архитектурная сложность проекта.

1. Приватный (Локальный) кеш

Данные хранятся на той же машине, где работает твоё приложение (прямо в памяти процесса). Примеры: ConcurrentHashMap в Java, functools.lru_cache в Python, Caffeine, Guava.

  • Плюсы: Очень высокая скорость (наносекунды, нет сетевых запросов), максимальная простота.
  • Минусы: Ограничен размером RAM сервера. Жестокие проблемы с консистентностью, если у тебя несколько серверов приложения (у каждого будет свой рассинхронизированный кеш).

2. Общий (Shared) кеш

Это отдельный распределенный сервис, к которому обращаются все инстансы твоего приложения. Классика: Redis, Memcached, Hazelcast.

  • Плюсы: Единое видение данных (консистентность), легкое горизонтальное масштабирование.
  • Минусы: Сетевая задержка, усложнение архитектуры (нужно мониторить еще один кластер).
Критерий Локальный кеш Общий кеш
Скорость Максимальная Средняя
Консистентность Низкая Высокая
Сложность Минимальная Средняя
Кейсы Big Tech для изучения