【问题标题】:Automatic cache refresh with Guava使用 Guava 自动刷新缓存
【发布时间】:2014-11-19 10:04:27
【问题描述】:


感谢这个论坛(How to automatically refresh Cache using Google Guava?),我了解了番石榴。
我想询问有关上述主题的一些信息(How to automatically refresh Cache using Google Guava?),但我无法为问题写 cmets,因为我的声誉太低。 因此,我必须创建一个新主题。感谢您的理解。

看到这段代码,

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 分钟调用一次重写的重新加载方法?我想是的,但我是对的吗?谢谢

【问题讨论】:

  • javadoc 中有什么不清楚的地方?你的测试显示了什么?
  • JB,Java doc很清楚,但是我的英文水平低。
  • JB,javadoc 很完美,但我的英语水平很低。事实上,我的 CacheLoader 的覆盖重载看看是否必须对一个键执行真正的重载,如果是,实现一个真正的重载 taht 键;否则不要为该键重新加载缓存。而且,即使在第二种情况下(没有真正的重新加载),我是否每 15 分钟调用一次重写的 relaod 方法?我想是的,但我是对的吗?谢谢

标签: java caching guava


【解决方案1】:

LoadingCache 内置

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

不会每 15 分钟自动刷新一个条目,因为缓存不会创建线程来执行任何类型的管理(过期或刷新条目)。如果您拨打 cache.get(someKey) 并在 20 分钟后再次拨打它,它会然后刷新条目作为您的呼叫的结果,前提是条目没有因为到达 maximumSize 而被驱逐,当然。

我不太确定你在问什么 CacheLoader::reload 和异步性。如果你覆盖它,你已经添加了代码,不是吗?希望这不仅仅是对super.reload(k, v) 的调用,因为这不会是异步的。如果需要,您可以使用更多详细信息来完成您的问题。

但是,如前所述,该方法不会每 15 分钟自动调用一次,它只会在再次请求条目时按需调用。

【讨论】:

  • 非常感谢弗兰克。
  • 弗兰克,谢谢你的回答。你很熟练。我正在学习 GUAVA,当然,肯定会有其他问题。非常感谢,祝您晚上愉快。
  • 弗兰克,我想将您的答案标记为有用,但我不能,因为我的声誉太低。祝你今晚愉快。晚会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 2013-06-02
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多