我想更新非加载缓存中的值:
Cache<String, Session> cache = CacheBuilder.newBuilder().expireAfterAccess( 30l, TimeUnit.MINUTES ).removalListener( removalListener ).build()
cache.put id, s
或
cache.asMap().put id, s
在两种情况下都会调用removeListener,这就是我想要避免的。
我该怎么做?
答案 0 :(得分:1)
更换元素时,无法阻止调用RemovalListener
。正如the documentation所说(强调补充):
导致通知的删除可能发生在手动删除或替换的条目中,或者由于定时到期,超出最大大小或垃圾回收而被驱逐。
但是,您可以检查cause
对象的RemovalNotification
字段。如果原因为REPLACED
,则系统会因调用put
,replace
或refresh
而删除该条目。