в интервью,Интервьюер спросил меня о моем опыте использования локального кэша.,Первое, что пришло мне в голову, былоRedis
,Однако после некоторых раздумий,Это не совсем правильно. после колебания,Мне пришлось ответить, что у меня нет соответствующего опыта. После возвращения домой,Я сразу проверил соответствующую информацию,Только тогда я обнаружил,Оказывается, это поле есть в локальном кэше.,Здесь так много скрытых тайн.
The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.
Простой перевод: программное обеспечение для хранения данных в памяти с открытым исходным кодом, используемое миллионами разработчиков в качестве базы данных, кэша, механизма потоковой передачи и брокера сообщений.
Судя по официальному представлению, помимо функции кэширования, он также имеет множество привлекательных функций. Однако сегодня мы сосредоточимся только на функциональности кэширования. Когда я впервые узнал об этом, я сравнил его с MySQL, которая привлекла большое внимание как база данных NoSQL в памяти. Учитывая узкое место базы данных с точки зрения ввода-вывода и тот факт, что большинство операций связаны только с чтением данных, мы рассмотрели возможность введения промежуточного уровня для кэширования части данных и предоставления их клиенту.
В истории вычислений всегда существовало мнение, что любую проблему в области вычислений можно решить, добавив промежуточный слой.
Как правило, разница между уникальной скоростью записи диска и памяти составляет более 10 раз.
Redis родился по похожему сценарию. На заре существования веб-сайта из-за небольшого количества посещений было возможно использовать JavaScript для подсчета и мониторинга различных данных. Однако по мере роста объема данных рабочая нагрузка по обслуживанию продолжает увеличиваться, и диск становится узким местом. Поэтому автор Redis написал эту базу данных в памяти на языке C.
Причина, по которой Redis называется Redis, заключается в том, что весь его процесс представляет собой службу REmote DIctionary Service, которая интерпретируется как служба удаленного словаря. (Это также соответствует местному).
Согласно официальному описанию, его основные функции разделены на четыре части: база данных, кеш, механизм потоковой передачи и брокер сообщений.
Поскольку это база данных, хранящаяся в памяти, потеря данных может легко произойти после отключения питания или сбоя. Затем он также разрабатывает стратегию. Это персистентность, разделенная на RDB и AOF.
Так какой из них лучше? Ответ: я хочу их всех. Хорошо это или нет, во многом зависит от вашего сценария использования. Что подходит, то и лучше.
Обычно это самая важная функция, которую мы используем Redis. Пока у нее нет конкурентов в базах данных NoSQL.
Тогда мне интересно, что такое потоковой двигатель?
Механизмы потоковой передачи — это способ обработки постоянных потоков данных, управляемых событиями. В потоке данных каждое событие соответствует элементу данных, и каждый элемент добавляется, изменяется или удаляется в течение определенного интервала времени. Механизмы потоковой передачи обычно используются в сценариях обработки данных в реальном времени, таких как очереди сообщений, архитектура, управляемая событиями, анализ данных в реальном времени и т. д.
Похоже, что он действительно похож на Message Queuing (MQ), и его удобнее использовать с операцией персистентности Redis. В практических сценариях применения его можно использовать в качестве промежуточного потока сообщений для обмена мгновенными сообщениями, анализа веб-данных, системных журналов и т. д.
Эта функция в основном используется, чтобы позволить Redis выполнять асинхронную связь и приложения, управляемые событиями, в реальном времени между несколькими узлами.
Поскольку Redis поддерживает модель публикации/подписки, это очень важное средство.
Конечно, это также может служить промежуточным прокси-сервером для микросервисов.
Если вы просто задумаетесь о том, какие ресурсы может сэкономить кэширование, возможно, вы некоторое время не сможете ответить на этот вопрос. Но если исходить из структуры данных Redis, вдохновения будет много.
Здесь есть еще много случаев, и все они основаны на богатых структурах данных.
Прежде чем обращаться к удаленному кешу, многие кеши фактически используются в процессе неявно, например, кеш ORM и строковый кеш JDK (постоянный пул).
Понимание этого в Java на самом деле представляет собой большую карту.
Если мы хотим реализовать кэш самостоятельно, что нам нужно учитывать?
Принимая все во внимание, это на самом деле большая проблема. К счастью, экосистема Java достаточно сильна.
Guava Cache — это локальная библиотека инструментов кэширования с открытым исходным кодом, разработанная Google. Ее дизайн вдохновлен ConcurrentHashMap. Она использует мелкозернистые блокировки в нескольких сегментах для обеспечения безопасности потоков, одновременно поддерживая требования к сценариям с высоким уровнем параллелизма и поддерживая несколько типов стратегий очистки кэша. очистка на основе емкости, очистка на основе времени, очистка на основе ссылок и т. д.
Важным контейнером пакета JUC является ConcurrentHashMap, созданный на его основе и имеющий более мелкую детализацию блокировок. В сочетании с полной реализацией в мышлении и родилась такая основа. Судя по Google, существует определенная гарантия прочности. Вначале он стал встроенным кешем Spring.
Caffeine — это библиотека кэширования Java с открытым исходным кодом, которая обеспечивает высокую частоту попаданий и отличные возможности параллелизма. Caffeine поддерживает параллелизм и доступ к данным временной сложности O(1), аналогично структуре данных ConcurrentMap, но предоставляет стратегию автоматического удаления «редко используемых» данных для поддержания разумного использования памяти. В Caffeine данные можно кэшировать из локальной памяти приложения Java, чтобы повысить производительность и скорость реагирования приложения. Caffeine предоставляет четыре стратегии добавления кэша, включая ручную загрузку, автоматическую загрузку, ручную асинхронную загрузку и автоматическую асинхронную загрузку.
Усовершенствованный Guava и ставший первым выбором платформы кэширования в Spring 5, это Caffeine, и его название очень похоже на Java.
Ява, остров Ява, богат кофе. Итак, иконка Java — это форма кофе. Кофеин: кофеин
Помимо вышеперечисленных фреймворков, локальное кэширование действительно прошло длительный период развития. Так что же с ними сделали разработчики?
После сравнения преимуществ и недостатков этих двух вариантов, я думаю, у вас уже есть ответ. Но здесь я кратко изложу свою точку зрения.
Независимо от технологии, лучшим выбором будет та технология, которая лучше всего соответствует потребностям вашего бизнеса.