Локальные кэши 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✕ для записи. Ваш пробег может варьироваться, но несомненно, что простой кэш обеспечивает существенное повышение производительности.
Итак, если ваш вариант использования позволяет, попробуйте простой кеш и дайте нам знать. Это так же просто, как один атрибут конфигурации!