Java 谷歌番石榴缓存,刷新过期超时

Java 谷歌番石榴缓存,刷新过期超时,java,caching,collections,guava,Java,Caching,Collections,Guava,我有以下内容,为所有新条目设置默认过期超时 Cache<String, Tracker> cache = CacheBuilder.newBuilder(). expireAfterAccess( expire , TimeUnit.MINUTES ).build(); Cache Cache=CacheBuilder.newBuilder()。 expireAfterAccess(expire,TimeUnit.MINUTES).build(); 填充expire access

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

Cache<String, Tracker> cache = CacheBuilder.newBuilder().
expireAfterAccess( expire , TimeUnit.MINUTES ).build();
Cache Cache=CacheBuilder.newBuilder()。
expireAfterAccess(expire,TimeUnit.MINUTES).build();
填充expire access后,如何刷新它


当然,一种解决方案可能是删除该项并重新插入它,但这可能比其他方法更昂贵。

您应该使用
缓存.getIfPresent(key)
访问要刷新的元素。根据(我的重点):

仅在指定的持续时间过后过期条目,因为该条目上次被读或写访问。请注意,逐出条目的顺序将类似于基于大小的逐出


因此,它应该完全实现您想要实现的功能。

您应该使用
cache.getIfPresent(key)
访问要刷新的元素。根据(我的重点):

仅在指定的持续时间过后过期条目,因为该条目上次被读或写访问。请注意,逐出条目的顺序将类似于基于大小的逐出


因此,它应该完全满足您的要求。

太棒了!虽然我使用cache.get(),但我希望它的行为是一样的:)是的,根据
expireAfterAccess
文档:“所有缓存读写操作(包括cache.asMap().get(Object)和cache.asMap().put(K,V))都会重置访问时间,但不会通过cache.asMap()集合视图上的操作重置,所以
get(K,Callable)
也可以。太好了!虽然我使用cache.get(),但我希望它的行为是一样的:)是的,根据
expireAfterAccess
文档:“所有缓存读写操作(包括cache.asMap().get(Object)和cache.asMap().put(K,V))都会重置访问时间,但不会通过cache.asMap()集合视图上的操作重置,所以
get(K,Callable)
也可以。