Типы кэшей



Если спросить разработчика, что такое кэш, он скорее всего ответит:



— Кэш — хранилище типа ключ-значение. Позволяет снизить количество запросов к БД, другому сервису или не выполнять повторно сложные вычисления



Это, безусловно, правда, но не вся. В этом посте кратко опишу, что ещё умеют делать кэши и какие они бывают.



1️⃣ Кэш внутри сервиса



Хранится только в оперативной памяти. При выключении сервиса кэш пропадает. При включении — заполняется. Популярны два варианта:



🔸 ConcurrentHashMap: полностью ручное управление. Разработчик пишет код по наполнению кэша, обновлению и удалению значений

🔸 Google Guava Cache: более продвинутый вариант. Очищает кэш, уведомляет об удалении, предоставляет статистику



2️⃣ Удалённый кэш



Не связан с конкретным сервисом и запущен в отдельном процессе

Доступен для нескольких сервисов

Хранит данные на нескольких уровнях — в оперативной памяти и на диске



3️⃣ Распределённый кэш



Данные хранятся в нескольких процессах. Один экземпляр обычно называют нодой

Шардирование. Распределяем данные по разным нодам и в итоге храним больше данных

Репликация. Дублируем данные на разные ноды и повышаем доступность



Уровни 2-3 это скорее ступени эволюции кэшей. Большинство реализаций находятся на уровне 4:



4️⃣ In-memory data grid (IMDG)



Распределённый кэш с дополнительными фичами. Например:

▫️ Атомарный апдейт (вместо чтения и перезаписи)

▫️ Подписка на изменения в кэше

▫️ Поддержка транзакций

▫️ SQL-like запросы

▫️ Средства синхронизации (распределённый lock, очередь)

▫️ Продвинутый мониторинг

▫️ Выполнение скриптов



У многих кэшей есть платная и бесплатная версии. Многие фичи из списка выше доступны только платно.



В вакансиях чаще всего встречается Redis, чуть отстаёт Hazelcast. Также видела в проектах Memcached, Ehcache, Aerospike, Ignite/GridGain, Coherence. В их описании нет слова "кэш", как минимум distributed real-time in-memory streaming data platform🙂



Рекомендую погулять по документации того же Redis или Hazelcast, может для вашего проекта найдётся что-то полезное.