Статьи

Кэши Infinispan сравниваются и сравниваются

Локальные кэши Infinispan   имеют несколько функций, которые делают его не просто картой: срок действия и выселение, прослушиватели, статистика, транзакции, хранилища кэша и т. Д. Однако это дорого обходится — из-за всех хуков и размещения объектов обычный ConcurrentHashMapбыстрее, чем локальный кеш.

Есть приложения, которым нужно что-то среднее — отличная производительность, но и некоторые из этих функций тоже. В нашем случае мотивация была внутренними кешами в Hibernate Second Level Cache. Поэтому Infinispan  8.0.1.Final  предоставляет  простой кэш —  альтернативную реализацию  AdvancedCache интерфейса, оптимизированную для максимальной производительности, когда вам нужны только основы.

В таблице ниже показано, какие функции доступны в простом кеше:

Характерная черта Доступность
Основной картоподобный API
Слушатели кэша (некластеризованные)
истечение
выселение
Безопасность
Доступ JMX
Статистика
операции
Пакетное обращение
Постоянство (кеш-накопители и загрузчик)
Карта Уменьшить Рамки
Структура распределенных исполнителей
Таможенные перехватчики
Индексирование (запрос)
Совместимость (встроенный / сервер)
Хранить как бинарный файл

Настроить простой кеш так же просто, как добавить один атрибут в конфигурацию XML: 

<local-cache name="mySimpleCache" simple-cache="true">
  <!-- expiration, eviction, security... -->
</local-cache>

Хотя схема конфигурации позволяет настроить неподдерживаемые функции, это приводит к исключению при создании кэша. 

Вы также можете настроить простой кеш программно: 

CacheManager cm = getCacheManager();
ConfigurationBuilder builder = new ConfigurationBuilder().simpleCache(true);
cm.defineConfiguration("mySimpleCache", builder.build());
Cache cache = cm.getCache("mySimpleCache");

Итак, какого улучшения производительности вы можете ожидать? Мы запустили базовый (однопоточный) тест с использованием  JMH,  и вот что мы получили: 

Реализация get () (операций / с) put () (операций / с)
ConcurrentHashMap 128354135 ± 2178755 33980088 ± 28487
Простой кеш 86969897 ± 738935 14044642 ± 14280
Локальный кеш 17280018 ± 361910 2267850 ± 44814

Это дает нам примерно 5-кратное ускорение для чтения и 6✕ для записи. Ваш пробег может варьироваться, но несомненно, что простой кэш обеспечивает существенное повышение производительности. 

Итак, если ваш вариант использования позволяет, попробуйте простой кеш и дайте нам знать. Это так же просто, как один атрибут конфигурации!