1

有没有办法从 CaffeineCache 访问元素的创建时间戳?种cache.get("x").getTimestamp()

4

2 回答 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 回答