Вопрос

Я планирую внедрить решение для кэширования в существующее веб-приложение.Ничего сложного:по сути, параллельная карта, которая поддерживает переполнение на диск и автоматическое вытеснение.Кластеризация кэша может потребоваться в будущем, но не сейчас.

Мне нравятся функции 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 Разве не текущий узел, но он все равно будет терпеть неудачу, если это единственная среда узла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top