当我的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
我尝试在文档中查找此功能,但无法了解实现此功能。
任何指针都会非常有用。
谢谢, 拉胡
答案 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")));