有时方法isKeyInCache返回true,但是key的元素不再存在。
示例:
Element element = new Element("test", "hello ehcache");
element.setTimeToLive(60);
element.setEternal(false);
cache.put(element);
如果马上我打电话给:
Element element = cache.get(key);
return element.getObjectValue();
这完美无缺。但是60秒后,方法isKeyInCache返回true,但get
方法抛出NullPointerException。知道为什么吗?
===
另一个例子:
CacheManager manager = new CacheManager(MainTeste.class.getResourceAsStream("/ehcache.xml"));
Cache cache = manager.getCache("siaep");
System.out.println("exists? " + cache.isKeyInCache("hello"));
Element element = new Element("hello", "hello world");
element.setTimeToLive(10);
cache.put(element);
System.out.println("exists? " + cache.isKeyInCache("hello"));
Thread.sleep(1000 * 11);
System.out.println("exists? " + cache.isKeyInCache("hello"));
输出:
存在?假
存在?真
存在?真
答案 0 :(得分:1)
作为stated in the javadoc,isKeyInCache
方法是检查密钥当前是否存在于缓存中的一种非常便宜的方法。但是,它不会执行任何状态检查,因此即使映射当前已过期,它也会返回true
。