我可以在不使用ehcache的情况下使spring缓存过期

时间:2015-07-01 01:05:07

标签: java spring spring-mvc caching

我一直在尝试使用带有spring上下文的spring cache。它运行正常而不使用ehcache,如下例所示:

https://github.com/michaelisvy/proxy-samples/tree/master/src/main/java/cache/simple

现在我希望缓存存储到 5分钟后过期。很多例子都在使用ehcache。我可以不使用ehcache而只使用弹簧缓存吗?

2 个答案:

答案 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或其他库。