java – 使用Guava自动缓存刷新

感谢这个论坛( How to automatically refresh Cache using Google Guava?),我了解了番石榴.
我想问一些关于上述主题的信息( How to automatically refresh Cache using Google Guava?),但我不能写问题评论,因为我的声誉太低了.
因此,我必须创建一个新主题.谢谢你的理解.

看到这段代码,

LoadingCache<K, V> cache = CacheBuilder.newBuilder()
        .refreshAfterWrite(15, TimeUnit.MINUTES)
        .maximumSize(100)
        .build(new MyCacheLoader());

如果一个条目A至少加载了一次她的值,
真的上面的代码足以每隔15分钟自动重新加载与密钥A相关的值吗?

当然,正如Frank所说,“我重写了MyCacheLoader中的CacheBuilder.reload(K,V)方法,因此它以异步方式执行.”
或者我有代码要添加?如果是的话,在哪里?
非常感谢你

PS:JB,javadoc很完美,但我的英语水平很低.事实上,我的CacheLoader的重写重载看看是否必须为一个密钥执行真正的重新加载,如果是,则实现该密钥的真正重新加载;否则不要为该密钥重新加载缓存.而且,即使在第二种情况下(没有真正的重新加载),我是否每15分钟调用一次重写的重载方法?我想是的,但我是对的吗?谢谢

使用.构建的LoadingCache

LoadingCache<K, V> cache = CacheBuilder.newBuilder()
        .refreshAfterWrite(15, TimeUnit.MINUTES)
        .maximumSize(100)
        .build(new MyCacheLoader());

每15分钟不会自动刷新一个条目,因为缓存不会创建线程来进行任何类型的管理(过期或刷新条目).如果你调用cache.get(someKey)然后在20分钟后再次调用它,那么它会因你的调用而刷新条目,前提是由于达到了maximumSize而没有驱逐该条目.

我不太确定你对CacheLoader :: reload和asynchronicity的要求.如果你覆盖它,你已经添加了代码,不是吗?希望它不仅仅是对super.reload(k,v)的调用,因为它不会是异步的.如果需要,您可以提供更多详细信息.

但是,如前所述,对于任何当前密钥,该方法不会每15分钟自动调用一次,只有在再次请求条目时才会按需调用该方法.

相关文章
相关标签/搜索