我正在使用 EhCache 核心 3.0。它在内部使用 BaseExpiry 和 Eh107Expiry 类来检查缓存是否过期。这些类实现了 Expiry 接口。我的问题是,我们能否扩展用于检查缓存是否过期的方法。如果我的方法正在使用该缓存中的某些数据,即使时间已过,我也不想使缓存的内容过期。
问问题
1163 次
3 回答
0
如果您在 xml 中添加 time-to-idle 或从 Expiry 接口覆盖 getExpiryForAccess,那么当您访问它们时,您的条目将不会被删除。下面是使用自定义 Expire 构建 Eh 缓存的代码。此博客将帮助您了解其他属性解释。
CacheConfigurationBuilder<Integer,String> cacheConfigurationBuilder = CacheConfigurationBuilder.newCacheConfigurationBuilder();
cacheConfigurationBuilder.withExpiry(new Expiry() {
@Override
public Duration getExpiryForCreation(Object key, Object value) {
return new Duration(120, TimeUnit.SECONDS);
}
@Override
public Duration getExpiryForAccess(Object key, Object value) {
return new Duration(120, TimeUnit.SECONDS);
}
@Override
public Duration getExpiryForUpdate(Object key, Object oldValue, Object newValue) {
return null;
}
})
.usingEvictionPrioritizer(Eviction.Prioritizer.LFU)
.withResourcePools(ResourcePoolsBuilder.newResourcePoolsBuilder().heap(200, EntryUnit.ENTRIES))
// adding defaultSerializer config service to configuration
.add(new DefaultSerializerConfiguration(CompactJavaSerializer.class, SerializerConfiguration.Type.KEY))
.buildConfig(Integer.class, String.class);
于 2016-12-09T12:43:18.510 回答
0
查看文档中有关到期的专用部分。它将帮助您了解您可以做什么以及如何去做。
如果这对您没有帮助,请按照评论中的建议扩展您的问题。
于 2016-12-09T11:45:31.923 回答
0
我想您可以使用 ehcache 装饰器并重新实现 isExpiry 来添加您自己的条件。请参考https://www.ehcache.org/documentation/2.8/apis/cache-decorators.html。
于 2020-05-11T20:57:54.193 回答