尽管键相等,但Ignite cache.containsKey返回false

时间:2016-07-01 12:51:03

标签: ignite

我运行以下代码:

@Test
public void containsTest() {
    IgniteCache<Object, Object> cache = ignite.getOrCreateCache("cache");

    Map<String, Integer> key1 = new HashMap<>();
    key1.put("ID", 1);
    Map<String, Integer> key2 = new LinkedHashMap<>();
    key2.put("ID", 1);

    System.out.println("key1.equals(key2)=" + key1.equals(key2));

    cache.put(key1, "key 1 value");

    System.out.println("cache.containsKey(key1)=" + cache.containsKey(key1));
    System.out.println("cache.containsKey(key2)=" + cache.containsKey(key2));
}

我得到以下输出:

key1.equals(key2)=true
cache.containsKey(key1)=true
cache.containsKey(key2)=false

JSR107规范说

  

确定Cache是​​否包含指定键的条目。

     

更正式地说,当且仅当此缓存包含key_quals(k)的键k的映射时才返回true。 (最多可以有一个这样的映射。)

那么为什么cache.containsKey会返回false?

由于

1 个答案:

答案 0 :(得分:0)

您提供的代码看起来不对。您不应该将hashmap用作缓存键。

试试这个:

@Test
public void test() {
    IgniteCache<Object, Object> cache = ignite.getOrCreateCache("cache");

    cache.put("ID", "1");

    System.out.println("cache.get(ID)=" + cache.get("ID"));
}