Заставьте Ehcache вернуть данные с истекшим сроком, если LoaderWriter завершится неудачно
Можно ли настроить 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();
0 ответов
Это невозможно. Однако, если вы не используете копир, это не копия, которую вы храните в своем загрузчике. Это всего лишь еще одна ссылка на объект в кеше.
Ваш запрос может быть подан в качестве усовершенствования в систему отслеживания проблем Ehcache.
Альтернативой было бы никогда не истекать данные, а заменять их извне, когда это необходимо.