Hazelcast:如何使用List作为hazelcast的关键

时间:2016-01-28 12:37:24

标签: java caching hazelcast

当我的java服务启动时,我从数据库中获取一个String列表,因此会将它们缓存在hazelcast中,key是String列表和值(例如)100。可能有多个列表具有不同的值。我的想法是,下次当我的方法接收String作为参数时,我应该能够在hazelcast中查找它并返回值。

例如:

// These lists are populated from database
List<String> list_1 = new ArrayList<>();
list_1.add("A");
list_1.add("B");

List<String> list_2 = new ArrayList<>();
list_2.add("C");
list_2.add("D");

hazelcast.put("CACHE_KEY_1", list_1, 111);
hazelcast.put("CACHE_KEY_2", list_2, 222);

因此,当我的方法收到“C”作为参数时,淡褐色应该能够检索该值,即

int value = hazelcast.get("CACHE_KEY_2", "C"); // should return 222

我尝试在文档中查找此功能,但无法了解实现此功能。

任何指针都会非常有用。

谢谢, 拉胡

2 个答案:

答案 0 :(得分:2)

如果要将值放在缓存中以获取任意字符串列表,并且您有两个或更多不同的字符串列表,则需要将列表名称和字符串组合成一个键(称为组合键) ,例如:

 for (String s : list_2) {
   cache.put("CACHE_KEY_2;" + s, 222);
 }

所以现在你可以询问缓存,列表2是否包含字符串'C'并返回相关的整数值:

 cache.get("CACHE_KEY_2;C");

您也可以使用两个单独的缓存,而不是使用组合键。如果数据的性质非常不同(不同的大小,不同的访问模式,到期时间等),这是更好的选择。

BTW:由于密钥必须是唯一的,因此它不是列表而是集合。

除了为组合键附加两个字符串之外,您还可以为此构造一个对象,其中包含两个元素作为字段并定义正确的equals()和hashCode()方法。

答案 1 :(得分:1)

为密钥创建一个新类:

class Key {
  private String category;
  private String listItem;
  ...
}

保存为淡褐色:

for(String listItem: list) {
  hazelcast.put(new Key("CACHE_KEY_2", listItem), 222);
}

获取:

assertEquals(222, hazelcast.get(new Key("CACHE_KEY_2", "C")));