番石榴缓存:如何在没有计算驱逐政策的情况下访问?

时间:2014-11-03 10:23:49

标签: caching guava

我有一个Guava缓存,我希望在从最后一次访问密钥开始X分钟后过期。但是,我还会定期对所有当前的键值进行操作(比X分钟更频繁),我不希望这被视为对键值对的访问,因为这样键永远不会过期。

是否有某种方法可以在不影响缓存内部状态的情况下读取密钥的值?即cache._secretvalues.get(key)我可以想象将Cache子类化为StealthCache并执行getStealth(key)?我知道依赖内部的东西是不理想的,只是想知道它是否可能。我认为当我执行cache.asMap.get()时,它仍然被视为内部访问。

1 个答案:

答案 0 :(得分:2)

来自official Guava tutorials

  

所有缓存读写操作都会重置访问时间(包括   Cache.asMap()。get(Object)和Cache.asMap()。put(K,V)),但不是   containsKey(Object),也不是对collection-views的操作   Cache.asMap()。 因此,例如,迭代通过cache.entrySet()   不会重置您检索的条目的访问时间。

所以,我要做的就是遍历entrySet而不是进行隐身操作。