redisTemplate是没办法直接通过批量将hash表读取成Map的,但是其中有个redisTemplate.opsForHash().multiGet()方法能近似实现对应功能。

    1. public Map<String,String> readHash(List<String> keys){
    2. String redisKey = "test";
    3. //这里会根据keys批量获取,如果某个元素所对应的数据没有,那么结果集里会在同样下标的位置放入null值
    4. List<Object> objects = redisTemplate.opsForHash().multiGet(redisKey, new ArrayList<>(keys));
    5. Map<String,String> result = new HashMap<>(keys.size());
    6. int index = 0;
    7. for (String key : keys) {
    8. //忽略null
    9. if (objects.get(index) == null){
    10. continue;
    11. }
    12. result.put(key,objects.get(index).toString());
    13. }
    14. return result;
    15. }

    主要就是multiGet()方法返回的长度是和想要查询的的容器长度是一样的,如果某个元素在此hash表里没有,那么结果集里会以null填充。这样就可以根据下标判断是否为null,来转换结果集。批量获取想要的数据。