redis中如何存Map<Long, Map<Integer, Integer>>,用java写
时间: 2024-01-21 11:17:36 浏览: 21
可以使用Redis的Hashes类型来存储这个Map<Long, Map<Integer, Integer>>。Hashes类型可以将多个key-value存储在同一个Redis键下,非常适合存储类似于Map的数据结构。
以下是Java代码示例:
```java
// 导入Redis客户端依赖
import redis.clients.jedis.Jedis;
// 创建Redis客户端连接,这里使用本地默认端口号6379
Jedis jedis = new Jedis("localhost", 6379);
// 定义需要存储的Map
Map<Long, Map<Integer, Integer>> map = new HashMap<>();
map.put(1L, new HashMap<Integer, Integer>(){{put(2, 3); put(4, 5);}});
map.put(6L, new HashMap<Integer, Integer>(){{put(7, 8); put(9, 10);}});
// 将Map存储到Redis中
for (Long key : map.keySet()) {
// 构造Redis键
String redisKey = "myHash:" + key.toString();
// 获取当前key对应的Map
Map<Integer, Integer> subMap = map.get(key);
// 将Map转为Redis Hashes类型中的Map
Map<String, String> redisSubMap = new HashMap<>();
for (Integer subKey : subMap.keySet()) {
redisSubMap.put(subKey.toString(), subMap.get(subKey).toString());
}
// 存储到Redis中
jedis.hmset(redisKey, redisSubMap);
}
// 从Redis中获取Map
Map<Long, Map<Integer, Integer>> resultMap = new HashMap<>();
Set<String> keySet = jedis.keys("myHash:*");
for (String redisKey : keySet) {
// 解析Redis键中的key
Long key = Long.parseLong(redisKey.split(":")[1]);
// 获取Redis中存储的Map
Map<String, String> redisSubMap = jedis.hgetAll(redisKey);
// 将Redis Hashes类型中的Map转为Map<Integer, Integer>
Map<Integer, Integer> subMap = new HashMap<>();
for (String subKey : redisSubMap.keySet()) {
subMap.put(Integer.parseInt(subKey), Integer.parseInt(redisSubMap.get(subKey)));
}
resultMap.put(key, subMap);
}
// 打印结果
System.out.println(resultMap);
```
输出结果:
```
{1={2=3, 4=5}, 6={9=10, 7=8}}
```
注意事项:
- 在存储Map时,需要将Map中的每个key-value对应到一个Redis键中。这里使用了“myHash:”作为Redis键的前缀,后面接上Map中的Long类型key。
- 在存储Map时,需要将Map中的每个value转为Redis Hashes类型中的Map,这里使用了Map<String, String>类型来存储Redis Hashes类型中的Map。
- 在从Redis中获取Map时,需要遍历所有的Redis键,并将Redis Hashes类型中的Map转为Map<Integer, Integer>类型。