Заставьте 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.

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

Другие вопросы по тегам