如何更新缓存中的值而不删除?

时间:2014-06-17 12:21:27

标签: caching guava

我想更新非加载缓存中的值:

Cache<String, Session> cache = CacheBuilder.newBuilder().expireAfterAccess( 30l, TimeUnit.MINUTES ).removalListener( removalListener ).build()

cache.put id, s

cache.asMap().put id, s

在两种情况下都会调用removeListener,这就是我想要避免的。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

更换元素时,无法阻止调用RemovalListener。正如the documentation所说(强调补充):

  

导致通知的删除可能发生在手动删除或替换的条目中,或者由于定时到期,超出最大大小或垃圾回收而被驱逐。

但是,您可以检查cause对象的RemovalNotification字段。如果原因为REPLACED,则系统会因调用putreplacerefresh而删除该条目。