[Исходный код Geek] Открытие исходного кода JetCache (1)

Java

Java Geek | Автор / Кен Ран Йе ЭтоJava-компьютерщик70-я оригинальная статья

Связанное чтение:

[Исходный код Geek] Исходный код JetCache (2) вид верхнего уровня
Основы JAVA (1) Простое и полное понимание внутренних классов и статических внутренних классов
Основы JAVA (2) Оптимизация памяти — использование ссылок Java для кэша
Основа JAVA (3) ClassLoader реализует горячую загрузку
Основы JAVA (4) Перечисление (enum) и определение констант, сравнение фабричных классов
Основы JAVA (5) функциональный интерфейс - повторное использование, острая грань разделения
Идеи программирования JAVA (1) Повышение масштабируемости за счет внедрения зависимостей
Идеи программирования JAVA (2) как программировать интерфейс
Идеи программирования на языке JAVA (3) Удалите неуклюжее «если», и режим стратегии саморегистрации элегантно удовлетворяет принципу «открыто-закрыто»
Идеи программирования JAVA (4) Как выбрать классическую парадигму режима Builder и режима factory?
Исходный код HikariPool (2) Идеи дизайна для справки
Люди на рабочем месте (1) Правила выживания для крупных ИТ-компаний


1. Почему JetCache

  1. Интегрированные Caffeine и Redis, два известных инструмента кэширования с открытым исходным кодом.
  2. Документация подробная и часто обновляется
  3. Инструмент кэширования с открытым исходным кодом Alibaba, который также используется внутри Alibaba.
  4. Код не сложный и легко читаемый
  5. Есть тестовые примеры для легкой отладки

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
  • Нечего сказать, много используется в приложениях распределенного кэша.

    end.