Заставьте Ehcache вернуть данные с истекшим сроком, если LoaderWriter завершится неудачно - PullRequest
0 голосов
/ 26 ноября 2018

Можно ли настроить Ehcache таким образом, чтобы кеш возвращал «просроченные» данные в случае сбоя основного CacheLoaderWriter (выдает исключение)?

Согласно моим тестам, если заданная запись в кешесрок действия истек, и CacheLoaderWriter не может загрузить данные, кеш возвращает ноль.

Однако в моем случае было бы лучше вернуть просроченные кэшированные данные, чем ничего.В качестве обходного пути я сохраняю последние успешно загруженные данные в CacheLoaderWriter, поэтому в случае сбоя при новом выполнении загрузки я возвращаю эту копию.В любом случае, подумайте, что было бы более «эффективно использовать память», чтобы каким-то образом возвращать данные, которые уже находятся в кэше, вместо сохранения другой копии в CacheLoaderWriter.

Я использую ehcache 3.4.0

        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
            .withCache("myCacheName",
                    CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, String.class, ResourcePoolsBuilder.heap(100))
                            .withExpiry(Expirations.timeToLiveExpiration(Duration.of(4, TimeUnit.HOURS)))
                            .withLoaderWriter(new TestCacheLoaderWriter()))
            .build();

1 Ответ

0 голосов
/ 10 декабря 2018

Это невозможно.Однако, если вы не используете копир, это не копия, которую вы храните в своем загрузчике.Это всего лишь еще одна ссылка на объект в кеше.

Ваш запрос может быть подан в качестве усовершенствования в Ehcache средство отслеживания проблем .

Альтернативой может быть никогда не истечьданные, но при необходимости заменяя их извне.

...