redisTemplate是没办法直接通过批量将hash表读取成Map的,但是其中有个redisTemplate.opsForHash().multiGet()方法能近似实现对应功能。
public Map<String,String> readHash(List<String> keys){
String redisKey = "test";
//这里会根据keys批量获取,如果某个元素所对应的数据没有,那么结果集里会在同样下标的位置放入null值
List<Object> objects = redisTemplate.opsForHash().multiGet(redisKey, new ArrayList<>(keys));
Map<String,String> result = new HashMap<>(keys.size());
int index = 0;
for (String key : keys) {
//忽略null
if (objects.get(index) == null){
continue;
}
result.put(key,objects.get(index).toString());
}
return result;
}
主要就是multiGet()方法返回的长度是和想要查询的的容器长度是一样的,如果某个元素在此hash表里没有,那么结果集里会以null填充。这样就可以根据下标判断是否为null,来转换结果集。批量获取想要的数据。