如何在Redis中存储嵌套的Hashmap?

时间:2018-09-10 10:39:10

标签: java redis hashmap

我想将网状HashMap存储在具有单个密钥的Redis中。

例如:

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

请建议:

  • 有什么方法可以存储上述数据结构?
  • 我们如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

Redis不支持在哈希内存储哈希。但是有REDIS as a JSON store可以在REDIS中存储JSON,它允许存储,更新和从Redis密钥中获取JSON值。我认为这可以帮助您存储数据。

答案 1 :(得分:1)

Redis目前不支持它。但是,除了rejson之外,还有其他方法可以实现。

您可以将其转换为JSON并存储在Redis中并进行检索。遵循我在Jackson中使用的实用程序方法。

要将对象转换为字符串:

public static String stringify(Object object) {
    ObjectMapper jackson = new ObjectMapper();
    jackson.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
    try {
        return jackson.writeValueAsString(object);
    } catch (Exception ex) {
        LOG.log(Level.SEVERE, "Error while creating json: ", ex);
    }
    return null;
}

示例:stringify(obj);

要将字符串转换为对象:

public static <T> T objectify(String content, TypeReference valueType) {
    try {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false);
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS");
        dateFormat.setTimeZone(Calendar.getInstance().getTimeZone());
        mapper.setDateFormat(dateFormat);
        return mapper.readValue(content, valueType);
    } catch (Exception e) {
        LOG.log(Level.WARNING, "returning null because of error : {0}", e.getMessage());
        return null;
    }
}

示例:List<Object> list = objectify("Your Json", new TypeReference<List<Object>>(){})

您可以根据需要更新此方法。我相信,您知道如何在Redis中添加和更新。

答案 2 :(得分:0)

REDIS现在允许嵌套HashMap https://redis.io/topics/data-types

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>1.5.22.RELEASE</version>
</dependency>
public class Redis {

    @Autowired
    RedisService redisService;

    @Cacheable(value = "name", key = "keyvalue")
    public Map<String, HashMap<String, String>> redisNestedMap(String keyvalue) {
        return redisService.getNestedMap();
    }

}
@Component
public class RedisService {

    public Map<String, HashMap<String, String>> getNestedMap() {
        Map<String, HashMap<String, String>> nestedMap = new HashMap<>();
        HashMap<String, String> value = new HashMap<>();
        value.put("key", "value");
        nestedMap.put("one", value);
        return nestedMap;
    }

}