Перевод текста на русский язык:
Финансовый уровень SpringBoot, открытое корпоративное ПО JPA REDIS бесшовная интеграция, оптимизация кэша.
Введение
Этот проект развивается с 2019 года, внутренняя версия уже используется в производственной среде крупных проектов, после строгого тестирования количество ошибок BUG невелико, не более 1 часа для расширения кэша, существующие несколько видов кэширования имеют демонстрацию, можно следить за ними постоянно, будет непрерывное обновление, также надеемся на активное участие в совместной разработке.
Если у вас есть хорошие предложения, вы можете связаться со мной, я обязательно приму их к сведению.
Первый вариант: только кэш Redis, без сохранения базы данных MySQL, требуется добавить аннотацию @EnableRedisRepositories.
Преимущества: очень удобная конфигурация, экономия места, мощные функции, поддержка кэширования и индексации и т. д.
Недостатки: можно использовать только Redis, не подходит для общего сценария разработки, подходит только для сценариев, где Redis является единственным хранилищем данных.
Второй вариант: добавление способа аннотации, требуется добавление аннотации @EnableCaching.
Преимущества: относительно удобная и экономная конфигурация.
Недостатки: хотя используется Redis и MySQL, но при разработке легко допустить ошибки, слишком много удалений из кэша и слишком много элементов в кэше; трудоёмкость добавления кэша относительно велика;
Третий вариант (рекомендуется):
Преимущества: используется Redis и MySQL, сверхэкономная и очень удобная конфигурация, мощные настраиваемые функции, гибкие в использовании, оптимизированный кэш, минимальное количество элементов в кэше, минимальный диапазон удаления кэша, динамическое изменение данных в кэше в реальном времени, поддерживается как первый уровень кэша, так и второй уровень кэша, а также поддерживается транзакция.
Недостатки: большая часть сценариев уже поддерживается, конечно, это зависит от человека, и можно сделать всё более всеобъемлющим, также можно рассмотреть параллельную производительность, способ сортировки, поддержку индекса и другие сценарии.
QQ общение
Описание версии
- Текущая версия v3.0.RELEASE официально выпущена и может быть использована.
- По сравнению с v2.0.RELEASE производительность значительно улучшена.
- Используемые технологии также полностью отличаются, в основном используются lettuce, disruptor, reactor, rxjava, rxjava2, commons-pool2 и др.
Примечание: lettuce (высокоуровневый Java-клиент Redis, используемый для поточно-безопасной синхронизации, асинхронного и реактивного использования. Поддерживает кластеры, Sentinel, конвейеры и кодировщики. https://lettuce.io)
- Крупные старые проекты добавляют кэш максимум за 1 час и завершают работу идеально.
- Поддержка режима обработки Netty без блокировки, очень быстрый режим.
- Поддержка конвейерного режима Netty, очень быстрый режим.
- Поддержка асинхронного режима работы Netty, очень быстрый режим.
- Поддерживает клиентские очереди, асинхронные пулы потоков, синхронные пулы потоков и режимы работы.
- Поддержка пула ресурсов клиента Netty и режима работы.
- Поддержка отката и повторной попытки 5 раз.
- Поддержка кодирования SerializedObjectCodec.
- Поддержка безопасного кэширования на уровне финансовых операций.
- Автоматическое переключение на базу данных при сбое Redis, что не влияет на работу системы.
План версии
- В версии v4.0 будет реализована функция: однократное сохранение больших объёмов данных, обработка пиковых нагрузок с использованием MQ, то есть запуск конвейерного режима.
- Версия v5.0 реализует функцию: решение проблемы согласованности кэша и межсерверного запроса данных с помощью canal.
Обязательные условия для запуска:
- JDK 8 181 +
- Maven 3.3.9 +
- Jedis 2.90
- MySql 5.7 + или MariaDB 10.2 +
- SpringBoot 1.5.7.RELEASE + (можно обновить версию самостоятельно, следующая версия будет обновлена до SpringBoot 2.x, поскольку SpringBoot 2.x больше не поддерживает Jedis, можно использовать только Lettuce)
Реализованные функции:
Общие функции
- Управление транзакциями Spring JPA и Lettuce, атомарность транзакций и т.д.
- Поддержка загрузки кэша и сортировки запросов.
- Поддержка конфигурации одномашинного режима Redis.
- Поддержка конфигурации режима Redis Sentinel.
- Поддержка общей конфигурации кластера Redis.
- Поддержка независимой конфигурации главного и подчинённого Redis.
- Поддержка AWS ElastiCache конфигурации кластера Redis.
- Реализация SerializedObjectCodec для реализации RedisCodec<String, Object>.
- Поддержка CompressionCodec.CompressionType.GZIP для сжатия пространства с минимальными затратами.
- Поддержка выполнения команд распределённой блокировки в режиме командной строки.
- Поддержка основного ключа базы данных для автоматического увеличения.
- Поддержка распределённого единого механизма распределения идентификаторов.
- Поддержка HikariCP пула соединений.
- Поддержка lombok.
- Поддержка FastJson.
Кэш первого уровня (String)
- Контроллерный интерфейс слоя кэша, нет необходимости учитывать проблему сортировки, возможно, слишком много элементов кэша, верхний слой данных изменяется относительно сильно, особенно для разбиения на страницы и разнообразия форм представления данных, но хорошо, что интерфейс не так уж велик (полностью реализован).
- Поддержка ProtoStuffRedisSerializer, самый быстрый способ (полностью реализован).
- Поддержка FstRedisSerializer, очень быстрый способ (обычно используется для больших данных, полностью реализован).
- Поддержка KryoRedisSerializer, очень быстрый способ (рекомендация официального сайта, безопасность типов, полностью реализована).
- Поддержка FastJsonRedisSerializer, относительно быстрый способ (безопасность типов, полностью реализован).
- Время кэширования по умолчанию составляет 4 дня, нельзя динамически изменять данные кэша (полностью реализовано).
Кэш второго уровня (Hash)
- JPA универсальная интеграция кэша без проблем для добавления, удаления, изменения и запроса (BaseJpaRedisRepositoryImpl) (полностью реализована).
- JPA сложная поддержка SQL без проблем интеграции кэша (BaseQueryDslJpaRepository) (полностью реализована).
- JPA поддержка без проблем кэширования с помощью FindBy (SecurecyPostProcessor) (полностью реализована).
- JPA поддерживает режим аннотаций @Query без проблем с интеграцией кэша (полностью реализована).
- Поддержка интеграции транзакций JPA и Redis (полностью реализована).
- Поддержка ProtoStuffRedisSerializer, самого быстрого способа (полностью реализована).
- Поддержка FstRedisSerializer, очень быстрого способа (обычно используется для больших данных, полностью реализована).
- Поддержка KryoRedisSerializer, очень быстрого способа (рекомендация официального сайта, безопасность типов, полностью реализована).
- Поддержка FastJsonRedisSerializer, относительно быстрого способа (безопасность типов, полностью реализована).
- Поддержка оптимизации кэша, минимального количества элементов кэша и минимального диапазона удаления кэша (полностью реализована).
- Поддержка динамического изменения данных кэша в реальном времени (полностью реализована).
- Поддержка синхронного пакетного режима обработки, очень быстрый (полностью реализован).
- Поддержка конвейерного пакетного режима обработки, очень быстрый, рекомендуется.
- Поддержка конвейерной транзакции, сверхбыстрый режим, рекомендуется.
- Поддержка конвейерных транзакций с оптимистичными блокировками, сверхбыстрый режим, рекомендуется.
- Поддержка режима безблокировочной обработки Netty, сверхбыстрого (полностью реализован).
- Поддержка асинхронного конвейерного пакетного режима обработки Netty, сверхбыстрого (полностью реализован).
- Поддержка асинхронного конвейерного транзакционного режима Netty, сверхбыстрого (полностью реализован).
- Поддержка асинхронного конвейерного транзакционного режима с оптимистическими блокировками Netty, сверхбыстрого (полностью реализован).
- Поддержка режима отката исключения и повторной попытки 5 раз (полностью реализован).
- Поддержка пакетных команд, превышающих количество запросов в очереди (по умолчанию 20), автоматический повторный режим (полностью реализован).
Использование
Очень просто, например: CustomerRepository, просто наследуйте BaseJpaRedisRepository<Customer, Long>.
Вот так:
CustomerRepository extends BaseJpaRedisRepository<Customer, Long>
Предложение:
Данные, которые необходимо кэшировать, следует выделить в специализированную таблицу или сущность в качестве репозитория кэша, чтобы упростить управление кэшем.
Для большинства случаев можно напрямую наследовать BaseJpaRedisRepository, не наследуя Repository, кэш не будет работать.
Производительность:
Пакетное сохранение 1000 операций, согласно текущей конфигурации, занимает в среднем 530 мс, первая операция занимает больше времени.
Некоторые конфигурации требуют инициализации.
Комментарии ( 0 )