一尘不染

基于日期的ehcache

hibernate

我正在使用ehcache 2.5.4。

我有一个对象,需要整天进行缓存,并在每天的00:00 am用新值刷新。

当前使用ehcache配置,我只能设置生存时间和空闲时间,但这取决于我创建对象的时间或使用时间。即:

    <cache
    name="cache.expiry.application.date_status"
    maxElementsInMemory="10"
    eternal="false"
    timeToIdleSeconds="60"
    timeToLiveSeconds="50" />

有没有一种方法可以使ehcache根据特定的时间使特定的缓存过期。


阅读 223

收藏
2020-06-20

共1个答案

一尘不染

我通过扩展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的附件,我希望它不会经常更改。

2020-06-20