Кеширование — это слой данных, который временно хранит информацию, к которой часто обращаются. Он не предназначен для постоянного хранения и обычно содержит лишь небольшой объем «горячих» данных.
Во многих системах нагрузка на чтение (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. Приватный (Локальный) кеш
Данные хранятся на той же машине, где работает твоё приложение (прямо в памяти процесса). Примеры: в Java, ConcurrentHashMap в Python, Caffeine, Guava.functools.lru_cache
- Плюсы: Очень высокая скорость (наносекунды, нет сетевых запросов), максимальная простота.
- Минусы: Ограничен размером RAM сервера. Жестокие проблемы с консистентностью, если у тебя несколько серверов приложения (у каждого будет свой рассинхронизированный кеш).
2. Общий (Shared) кеш
Это отдельный распределенный сервис, к которому обращаются все инстансы твоего приложения. Классика: Redis, Memcached, Hazelcast.
- Плюсы: Единое видение данных (консистентность), легкое горизонтальное масштабирование.
- Минусы: Сетевая задержка, усложнение архитектуры (нужно мониторить еще один кластер).
| Критерий | Локальный кеш | Общий кеш |
|---|---|---|
| Скорость | Максимальная | Средняя |
| Консистентность | Низкая | Высокая |
| Сложность | Минимальная | Средняя |