当key的元素不再存在时,为什么isKeyInCache(由EHCache)返回true?

时间:2015-11-12 01:06:18

标签: ehcache

有时方法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"));

输出:

  

存在?假

     

存在?真

     

存在?真

1 个答案:

答案 0 :(得分:1)

作为stated in the javadocisKeyInCache方法是检查密钥当前是否存在于缓存中的一种非常便宜的方法。但是,它不会执行任何状态检查,因此即使映射当前已过期,它也会返回true