Google Guava Cache - 在运行时更改逐出超时值

时间:2014-11-10 12:27:04

标签: java caching timeout guava

我使用以下内容:

LoadingCache<String, Long> inQueueLoadingCache = CacheBuilder.newBuilder()
    .expireAfterWrite(120, TimeUnit.SECONDS)
    .removalListener(inQueueRemovalListener)
    .build(inQueueCacheLoader);

每120秒后,缓存条目被逐出,并按预期工作。

我的问题是:如何更改当前缓存的超时值,例如120到60秒?在此更改期间缓存条目会发生什么?

1 个答案:

答案 0 :(得分:3)

简短回答:您无法更改逐出超时值或Cache创建的LoadingCache / CacheBuilder的任何属性。

无论如何,你为什么要改变超时? (还要记住,Guava缓存非常简单。)如果你确实想要更改超时,你有两个选择:

  • 使用目标语义创建新的Cache并复制旧的缓存内容,例如。

    LoadingCache<String, Long> newCache = CacheBuilder.newBuilder()
        .expireAfterWrite(60, TimeUnit.SECONDS)
        .removalListener(inQueueRemovalListener)
        .build(inQueueCacheLoader);
    newCache.putAll(inQueueLoadingCache.asMap());
    

    但您将放宽原始访问时间等。

  • 根本不使用CacheBuilder并自己实施LoadingCache,例如使用AbstractLoadingCache骨干实施和您自己的更改超时的政策。但这并不容易,因为你有一个很好的LoadingCache的API,但你必须自己实现整个事情(我试过一次,但结束时使用比番石榴更高级的缓存)一个)。