我正在使用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的附件,我希望它不会经常更改。

09-27 17:35