咖啡因 - 如何仅在创建时间后过期缓存值
Caffeine - how expires Cached values only after creation time
Caffeine 有 expiresAfterWrite
方法查看上次写入时间。我希望它只看创建时间。因此,当第一个条目出现时,条目将在固定时间后过期,而无需查看此条目的更新次数。这可能吗?
是的,但需要使用更高级的 Expiry
api。在下面的示例中,新创建的条目具有固定的 5 分钟生命周期。这是通过在更新或读取时返回 currentDuration
来完成的。
LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
.expireAfter(new Expiry<Key, Graph>() {
public long expireAfterCreate(Key key, Graph graph, long currentTime) {
return TimeUnit.MINUTES.toNanos(5);
}
public long expireAfterUpdate(Key key, Graph graph,
long currentTime, long currentDuration) {
return currentDuration;
}
public long expireAfterRead(Key key, Graph graph,
long currentTime, long currentDuration) {
return currentDuration;
}
})
.build(key -> createExpensiveGraph(key));
Caffeine 有 expiresAfterWrite
方法查看上次写入时间。我希望它只看创建时间。因此,当第一个条目出现时,条目将在固定时间后过期,而无需查看此条目的更新次数。这可能吗?
是的,但需要使用更高级的 Expiry
api。在下面的示例中,新创建的条目具有固定的 5 分钟生命周期。这是通过在更新或读取时返回 currentDuration
来完成的。
LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
.expireAfter(new Expiry<Key, Graph>() {
public long expireAfterCreate(Key key, Graph graph, long currentTime) {
return TimeUnit.MINUTES.toNanos(5);
}
public long expireAfterUpdate(Key key, Graph graph,
long currentTime, long currentDuration) {
return currentDuration;
}
public long expireAfterRead(Key key, Graph graph,
long currentTime, long currentDuration) {
return currentDuration;
}
})
.build(key -> createExpensiveGraph(key));