我想在我的Java代码中将多个映射值存储在Redis的单个键中

时间:2016-02-12 10:30:17

标签: java dictionary redis

下面,我有一个HashMap列表,我想将所有这些地图存储在redis的单个密钥中,但我没有得到任何方法来存储所有单键中的这些地图。请帮我解决这个问题。

Jedis jedis = new Jedis("localhost");
List <HashMap<String, String>> listOfMaps = new ArrayList<HashMap<String, String>>();
listOfMaps.add(new HashMap<String,String>);
listOfMaps.add(new HashMap<String,String>);
listOfMaps.add(new HashMap<String,String>);
listOfMaps.add(new HashMap<String,String>);
.
.
.
and so on lets take upto 10 values

现在,我想将这些地图存储在这样的密钥中:

for(int i=0;i<listOfMaps.size();i++){
   jedis.hmset("mykey",listofMaps[i]);
}

但在他的情况下,hmset会覆盖所有旧值以写入新值。 请告诉我任何替代方法,将所有这些地图值存储在单个键 mykey 中。

2 个答案:

答案 0 :(得分:1)

您可以使用Redisson框架提供的Multimap对象。它允许将每个映射键的多个值存储为列表或集合。这是一个例子:

RMultimap<String, Integer> multimap = redisson.getListMultimap("myMultimap");
for (int i = 0; i < 10; i++) {
    myMultimap.put("someKey", i);
}
// returns Redis list object
RList list = myMultimap.get("someKey");

答案 1 :(得分:0)

您可以使用类似以下的内容

 public static void main(String[] args) {

    Map<String, List<String>> map = new HashMap<String, List<String>>();

    List<String> valSetOne = new ArrayList<String>();
    valSetOne.add("ABC");
    valSetOne.add("BCD");
    valSetOne.add("DEF");

    List<String> valSetTwo = new ArrayList<String>();
    valSetTwo.add("CBA");
    valSetTwo.add("DCB");

    map.put("FirstKey", valSetOne);
    map.put("SecondKey", valSetTwo);

    for (Map.Entry<String, List<String>> entry : map.entrySet()) {

        String key = entry.getKey();

        List<String> values = entry.getValue();

        System.out.println("Value of " + key + " is " + values);

    }

}