我正在使用ehcache 2.5.4。
我有一个对象,需要全天缓存,并在每天的00:00 am用新值刷新。
当前使用ehcache配置,我只能设置生存时间和空闲时间,但这取决于我创建对象的时间或使用时间。 IE:
<cache
name="cache.expiry.application.date_status"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="60"
timeToLiveSeconds="50" />
有没有一种方法可以使ehcache根据特定的时间使特定的缓存过期。
最佳答案
我通过扩展Ehcache的Element
类来做到这一点,如下所示:
class EvictOnGivenTimestampElement extends Element {
private static final long serialVersionUID = ...;
private final long evictOn;
EvictOnGivenTimestampElement(final Serializable key, final Serializable value, final long evictOn) {
super(key, value);
this.evictOn = evictOn;
}
@Override
public boolean isExpired() {
return System.currentTimeMillis() > evictOn;
}
}
其余的操作就像将
EvictOnGivenTimestampElement
对象的新实例而不是Element
放入缓存一样容易。这种方法的优点是您不必担心外部cronjobs等。
而且明显的缺点是Ehcache API的附件,我希望它不会经常更改。