我一直在尝试使用带有spring上下文的spring cache。它运行正常而不使用ehcache,如下例所示:
https://github.com/michaelisvy/proxy-samples/tree/master/src/main/java/cache/simple
现在我希望缓存存储到 5分钟后过期。很多例子都在使用ehcache。我可以不使用ehcache而只使用弹簧缓存吗?
答案 0 :(得分:1)
根据文档,你需要有一个支持它的库,而不仅仅是一个抽象(你当前正在做的)。
参考指南 - How can I set the TTL/TTI/Eviction policy/XXX feature?
其他选择是使用番石榴和春天。请看这里的示例 - Spring 3.1 and Guava 1.13.1 to set CacheTTL
答案 1 :(得分:1)
如果您正在谈论Spring附带的Array
(
[0] => Smith
[1] => Jones
)
,那就不可能了。它只是使用org.springframework.cache.concurrent.ConcurrentMapCache
作为缓存存储。
但是,您可以创建调度程序以手动删除缓存。如果要转到该路径,则必须创建保存时间戳信息的对象。
java.util.concurrent.ConcurrentHashMap
您必须使用上面定义的class CacheElement {
long timestamp;
Object value;
public CacheElement(Object value){
this.value = value;
touch();
}
public void touch(){
this.timestamp = new Date().getTime();
}
..../omit for breifvity
}
包装缓存值
你必须覆盖CacheElement
在返回值之前调用org.springframework.cache.Cache.ValueWrapper#get
。此外,您可能想要检查缓存值是否已过期。将CacheElement中的时间戳与当前时间戳进行比较,如果它小于指定的TTL,则触摸()它。否则,从缓存存储中删除并返回null。
希望你有这个想法:)
我的建议是,使用支持TTL的ehcache或其他库。