有没有办法从 CaffeineCache 访问元素的创建时间戳?种cache.get("x").getTimestamp()
?
问问题
334 次
2 回答
3
缓存尝试存储执行其操作所需的最少元数据,因此省略了一些便利以避免浪费。在这些情况下,您应该考虑通过包装您的值来添加该元数据。
缓存确实公开了运行时元数据,但这通常取决于它是如何构建的。这可以通过使用Cache.policy()来访问。例如,cache.policy().expireAfterWrite()
提供了一种ageOf(key)
方法来确定自上次重置其过期时间戳以来该条目已驻留了多长时间。要计算条目过期的时间,您可以从策略的持续时间中减去年龄(通过getExpiresAfter()
)。
于 2020-04-23T15:31:29.403 回答
0
Cache 接口提供 getPolicy 方法来根据缓存的运行时特性检查和执行低级操作。例如下面的代码片段使用写后策略返回缓存中条目的年龄。
private static void printAgeOfEntryUsingAfterWritePolicy(Cache cache, Object key) {
Optional<FixedExpiration> expirationPolicy = cache.policy().expireAfterWrite();
if (!expirationPolicy.isPresent()) {
return;
}
Optional<Duration> ageOfEntry = expirationPolicy.get().ageOf(key);
if (!ageOfEntry.isPresent()) {
return;
}
Duration duration = ageOfEntry.get();
System.out.println("Element with key " + key + " is in the cache from " + duration.getSeconds() + " seconds....");
}
参考链接。
于 2021-04-28T06:13:18.307 回答