感谢这个论坛(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所提到的,&#34;我重写了MyCacheLoader中的CacheBuilder.reload(K,V)方法,因此它以异步方式执行。&#34; 或者我有代码要添加?如果是的话,在哪里? 非常感谢你
PS:JB,javadoc很完美,但我的英语水平很低。事实上,我的CacheLoader的重写重载看看是否必须为一个密钥执行真正的重新加载,如果是,则实现该密钥的真正重新加载;否则不要为该密钥重新加载缓存。而且,即使在第二种情况下(没有真正的重新加载),我是否每15分钟调用一次重写的重载方法?我想是的,但我是对的吗?感谢答案 0 :(得分:9)
使用
构建的LoadingCache
LoadingCache<K, V> cache = CacheBuilder.newBuilder()
.refreshAfterWrite(15, TimeUnit.MINUTES)
.maximumSize(100)
.build(new MyCacheLoader());
每15分钟自动刷新一个条目,因为缓存不会创建线程来执行任何类型的管理(过期或刷新条目)。如果您拨打cache.get(someKey)
,然后在20分钟后再次拨打电话,那么然后会因您的通话而刷新该条目,前提是该条目由于{{1}而未被驱逐当然,到达了。
我不太确定你对maximumSize
和异步性的询问。如果你覆盖它,你已经添加了代码,不是吗?希望它不仅仅是对CacheLoader::reload
的调用,因为它不是异步的。如果需要,您可以提供更多详细信息。
但是,如前所述,对于任何现有密钥,该方法每15分钟自动调用 ,只有在再次请求条目时才会按需调用该方法。