Интегрированные Caffeine и Redis, два известных инструмента кэширования с открытым исходным кодом.
Документация подробная и часто обновляется
Инструмент кэширования с открытым исходным кодом Alibaba, который также используется внутри Alibaba.
Код не сложный и легко читаемый
Есть тестовые примеры для легкой отладки
2. Посмотрите на исходный код со знанием кеша
Как инструмент кэширования, JetCache должен иметь возможности инструмента кэширования, и в то же время он должен решать распространенные проблемы кэширования.Посмотрите на исходный код JetCache с соответствующими точками знаний кэширования и сравните очки знаний, так что вы можете получить больше. Основные знания о кэшировании следующие:
2.1 Сценарии применения кэша
К основным сценариям применения кэширования относятся:
Сокращение использования операций ввода-вывода базы данных
Количество подключений к базе данных обычно ограничено. Если количество одновременных запросов превышает максимальное количество подключений, база данных будет недоступна, что приведет к сбою в бизнесе. Поэтому некоторые данные можно кэшировать, чтобы уменьшить доступ к базе данных.
Уменьшить использование ЦП
Для некоторых данных, которые требуют вычислений ЦП и будут использоваться много раз, их также можно кэшировать, чтобы уменьшить потребление ЦП.
2.2. Классификация кеша
2.2.1 Классификация области применения
Кэш можно разделить на:
кеш уровня потока
Например, подключение к базе данных может быть передано через кэш-память потока вместо параметров метода. Например, когда бизнес сложный, весь бизнес-процесс должен быть связан через различные подпроцессы. Я не знаю. В настоящее время использование кэша в потоке позволяет избежать связывания каждого подпроцесса из-за передачи данных через параметры.Просто поместите данные, к которым осуществляется доступ, в кэш на уровне потока, и последующие подпроцессы будут легко доступны. также уменьшает доступ к базе данных и повышает производительность.
Кэш уровня потока в Java может соответствовать данным, хранящимся в ThreadLocal.
кэш уровня процесса
Внутрипроцессный общий кеш, видимый всем потокам.
Кэш уровня процесса может соответствовать данным, хранящимся в статических переменных, например, в JAVA.
Распределенный кеш
В архитектуре микросервисов несколько хостов микросервисов используют свои собственные внутрипроцессные кеши, которые будут занимать больше памяти, а также возникнут проблемы с согласованностью данных.Для кэширования данных необходимо использовать независимые распределенные кеши.
2.2.2 Классификация кэша Java
Кэши в Java можно разделить на три категории:
Сильный кеш ссылок
Объекты имеют сильные ссылки и не будут удалены сборщиком мусора, даже если возникнет ошибка OutOfMemoryError.
кеш мягких ссылок
Объекты имеют мягкие ссылки, которые не утилизируются сборщиком мусора, когда памяти достаточно; эти объекты утилизируются, когда памяти недостаточно.
Слабый эталонный кеш
Объекты имеют слабые ссылки и будут утилизированы, если будут обнаружены во время сборки мусора, независимо от того, достаточно ли памяти.
Для хоста с ограниченным объемом памяти можно установить кеш, к которому редко обращаются, в качестве мягкого эталонного или слабого эталонного кэша и автоматически перезапускать его, когда требуется память.
2.3 Дизайн кэша
Соображения по проектированию кэша включают:
стратегия отказа
Различные стратегии отказа используются в соответствии с различными сценариями приложений, такими как «первым пришел — первым обслужен», «первым пришел — первым вышел», «наименее недавно использованный» и т. д.
Сериализация
Для распределенных кэшей необходимо учитывать стратегии сериализации, чтобы избежать недоступности сериализованных кэшей после обновления версии.
Мониторинг кеша
Отслеживайте доступ к кешу, частоту попаданий, горячие точки и т. д. и оптимизируйте кеш.
многоуровневый кэш
Подумайте, следует ли использовать многоуровневое кэширование для повышения надежности.
2.4. Часто задаваемые вопросы
При использовании или разработке инструмента кэширования необходимо учитывать, можно ли решить распространенные проблемы с кэшированием, в том числе:
проникновение в кеш
Это означает, что в базе данных нет данных, а в кеше нет данных, поэтому каждый доступ будет обращаться к базе данных, что приводит к увеличению нагрузки на данные.
Кэш Лавина
Это означает, что кеш недоступен или время тайм-аута кеша одинаковое, и кеш выходит из строя в тот же период времени, а большое количество запросов на доступ к базе данных приводит к лавинообразности системы.
разбивка кеша
Это означает, что у определенного ключа установлен срок годности, и это горячая точка, если ключ выходит из строя, приходит большое количество запросов и промахивается кеш, объем обращений к базе данных резко увеличивается.
загрязнение кеша
Когда кэшированные данные обновляются, но данные базы данных не обновляются, это приводит к загрязнению кэша.
2.4 Платформа с открытым исходным кодом
Существует много фреймворков с открытым исходным кодом для кэширования.Когда время и энергия ограничены, сначала сосредоточьтесь на изучении нескольких основных, а затем исследуйте другие, когда у вас есть время или вы хотите стать экспертами по кэшированию. Теперь вы можете ознакомиться со следующим:
JetCache
Причины уже упоминались ранее.
Caffeine
Говорят, что он оптимизирован на основе Google Guava Cache, он же Cache поддерживается Spring 5 по умолчанию, Caffeine предлагает новый алгоритм W-TinyLFU, который может решить проблему неточной статистики частоты и затухания частоты доступа, и имеет высокий процент попаданий.
Redis
Нечего сказать, много используется в приложениях распределенного кэша.