如果 LoaderWriter 失败,使 Ehcache return 过期数据

Make Ehcache return expired data if LoaderWriter fails

是否可以设置 Ehcache,如果底层 CacheLoaderWriter 失败(抛出异常),缓存将 return "expired" 数据?

根据我的测试,如果给定的缓存条目已过期,并且 CacheLoaderWriter 无法加载数据,缓存 returns null。

但是,就我而言,return 过期的缓存数据总比没有好。作为解决方法,我正在做的是将最新成功加载的数据存储在 CacheLoaderWriter 中,因此如果新的加载执行失败,我将 return 这个副本。无论如何,认为这会更多 "memory efficient" 以某种方式 return 它已经在缓存中的数据,而不是在 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();

这是不可能的。但是,除非您使用的是复印机,否则它不是您保存在装载程序编写器中的副本。它只是缓存中对象的另一个引用。

您的请求可以作为 Ehcache 中的增强功能提交 issue tracker

备选方案是永不过期数据,但在需要时从外部替换它。