我正在使用ehcache 2.5.4。
我有一个对象,需要整天进行缓存,并在每天的00:00 am用新值刷新。
当前使用ehcache配置,我只能设置生存时间和空闲时间,但这取决于我创建对象的时间或使用时间。即:
<cache name="cache.expiry.application.date_status" maxElementsInMemory="10" eternal="false" timeToIdleSeconds="60" timeToLiveSeconds="50" />
有没有一种方法可以使ehcache根据特定的时间使特定的缓存过期。
我通过扩展Ehcache的Element类来做到这一点:
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。
EvictOnGivenTimestampElement
这种方法的优点是您不必担心外部cronjobs等。明显的缺点是Ehcache API的附件,我希望它不会经常更改。