【问题标题】:Google Guava Cache, refreshing the expire timeoutGoogle Guava Cache,刷新过期超时
【发布时间】:2014-10-24 15:22:10
【问题描述】:

我有以下内容,它为所有新条目设置了默认过期超时。

Cache<String, Tracker> cache = CacheBuilder.newBuilder().
expireAfterAccess( expire , TimeUnit.MINUTES ).build();

如何在填充过期访问权限后刷新它?

当然,一种解决方案可能是移除该项目并重新插入它,但这可能比其他方式已经可能实现的更昂贵

【问题讨论】:

    标签: java caching collections guava


    【解决方案1】:

    您应该只使用cache.getIfPresent(key) 访问要刷新的元素。根据Guava wiki page(强调我的):

    expireAfterAccess(long, TimeUnit) 仅在指定的持续时间过后自上次通过读取或写入访问条目后才使条目过期。请注意,条目被驱逐的顺序与基于大小的驱逐相似。

    所以它应该完全符合您的要求。

    【讨论】:

    • 甜蜜!虽然我使用 cache.get(),但我希望它的行为相同:)
    • 是的,根据expireAfterAccess文档:“访问时间由所有缓存读写操作(包括Cache.asMap().get(Object)和Cache.asMap() .put(K, V)),但不是通过对 Cache.asMap() 的集合视图的操作。”,所以get(K ,Callable) 也可以。
    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 2017-07-09
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多