我有一个Guava缓存,我希望在从最后一次访问密钥开始X分钟后过期。但是,我还会定期对所有当前的键值进行操作(比X分钟更频繁),我不希望这被视为对键值对的访问,因为这样键永远不会过期。
是否有某种方法可以在不影响缓存内部状态的情况下读取密钥的值?即cache._secretvalues.get(key)我可以想象将Cache子类化为StealthCache并执行getStealth(key)?我知道依赖内部的东西是不理想的,只是想知道它是否可能。我认为当我执行cache.asMap.get()时,它仍然被视为内部访问。
答案 0 :(得分:2)
所有缓存读写操作都会重置访问时间(包括 Cache.asMap()。get(Object)和Cache.asMap()。put(K,V)),但不是 containsKey(Object),也不是对collection-views的操作 Cache.asMap()。 因此,例如,迭代通过cache.entrySet() 不会重置您检索的条目的访问时间。
所以,我要做的就是遍历entrySet而不是进行隐身操作。