0

是否可以设置 Ehcache,如果底层 CacheLoaderWriter 失败(抛出异常),缓存将返回“过期”数据?

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

但是,就我而言,返回过期的缓存数据总比什么都不返回要好。我正在做的解决方法是将最新成功加载的数据存储在 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();
4

1 回答 1

0

这不可能。但是,除非您使用的是复印机,否则它不是您保存在 loader-writer 中的副本。它只是对缓存中对象的另一个引用。

您的请求可以作为 Ehcache问题跟踪器中的增强功能提交。

另一种方法是永远不会使数据过期,而是在需要时从外部替换它。

于 2018-12-10T16:18:15.047 回答