Infinispan эквивалентен copyOnRead и copyOnWrite ehcache.
-
04-10-2019 - |
Вопрос
Я планирую внедрить решение для кэширования в существующее веб-приложение.Ничего сложного:по сути, параллельная карта, которая поддерживает переполнение на диск и автоматическое вытеснение.Кластеризация кэша может потребоваться в будущем, но не сейчас.
Мне нравятся функции copyOnRead и copyOnWrite ehcache, потому что это означает, что мне не нужно вручную клонировать объекты перед изменением того, что я извлекаю из кэша.Теперь я начал смотреть Инфиниспан, но ничего эквивалентного я там не нашел.Существует ли оно?
То есть должны пройти следующие модульные тесты:
@Test
public void testCopyOnWrite() {
Date date = new Date(0);
cache.put(0, date);
date.setTime(1000);
date = cache.get(0);
assertEquals(0, date.getTime());
}
@Test
public void testCopyOnRead() {
Date date = new Date(0);
cache.put(0, date);
assertNotSame(cache.get(0), cache.get(0));
}
Решение
По словам разработчика JBoss, Infinispan пока не поддерживает такую функцию.Вам следует зарегистрировать запрос на улучшение в Трекер проблем Infinispan, чтобы другие могли проголосовать за него (я буду).
При этом, если вам нужна эта функция сейчас, обходным путем было бы расширить АннотацияДелегированиеКэш, и переопределить get
и put
методы для добавления этой функциональности.Вы можете использовать свою собственную стратегию копирования или для вдохновения посмотреть, как это сделал EHCache.
Также вы можете рассмотреть возможность Форум Infinispan если у вас есть дополнительные вопросы, так как вы получите больше просмотров от сообщества Infinispan.
Другие советы
Инфиниспан делает Поддержка copyonread / peporonwrite, хотя и фактический формат не подключен. Элемент конфигурации лензиализация в Infinispan 4.x и stareAndbinary в Infinispan 5.x. Объекты сериализуются с использованием Fluargable Marshaller Framework, которая используется для всех форм Marshalling, в том числе для RPC, вызывает сеть и хранилище на диск.
я верю storeAsBinary
только вступает в силу, когда объекты должны быть сериализованы, что означает, когда put
Вызывается операция, владелец не является текущим узлом.
Это также означает, что тестовые проверки в вопросе могут пройти, если владелец ключа 0
Разве не текущий узел, но он все равно будет терпеть неудачу, если это единственная среда узла.