可以使用 Redis 中的各种数据结构来存储数据。 可以转换JSON格式的对象。理想情况下,可以使用纯键将 JSON 存储为值。您可以使用 Redis 哈希实现更复杂的结构化对象映射。Spring Data Redis 提供了将数据映射到哈希的各种策略(取决于用例):Jackson2JsonRedisSerializerSpring中文文档

哈希映射器

哈希映射器是映射对象到 a 和返回的转换器。 旨在与 Redis 哈希一起使用。Map<K, V>HashMapperSpring中文文档

有多种实现方式可供选择:Spring中文文档

以下示例演示了实现哈希映射的一种方法:Spring中文文档

public class Person {
  String firstname;
  String lastname;

  // …
}

public class HashMapping {

  @Resource(name = "redisTemplate")
  HashOperations<String, byte[], byte[]> hashOperations;

  HashMapper<Object, byte[], byte[]> mapper = new ObjectHashMapper();

  public void writeHash(String key, Person person) {

    Map<byte[], byte[]> mappedHash = mapper.toHash(person);
    hashOperations.putAll(key, mappedHash);
  }

  public Person loadHash(String key) {

    Map<byte[], byte[]> loadedHash = hashOperations.entries(key);
    return (Person) mapper.fromHash(loadedHash);
  }
}

杰克逊2HashMapper

Jackson2HashMapper使用 FasterXML Jackson 为域对象提供 Redis 哈希映射。 可以将顶级属性映射为 Hash 字段名称,并可选择展平结构。 简单类型映射到简单值。复杂类型(嵌套对象、集合、映射等)表示为嵌套 JSON。Jackson2HashMapperSpring中文文档

扁平化为所有嵌套属性创建单独的哈希条目,并尽可能将复杂类型解析为简单类型。Spring中文文档

请考虑以下类及其包含的数据结构:Spring中文文档

public class Person {
  String firstname;
  String lastname;
  Address address;
  Date date;
  LocalDateTime localDateTime;
}

public class Address {
  String city;
  String country;
}

下表显示了上一个类中的数据在法线映射中的显示方式:Spring中文文档

表 1.法线映射
哈希字段 价值

名字Spring中文文档

JonSpring中文文档

姓氏Spring中文文档

SnowSpring中文文档

地址Spring中文文档

{ "city" : "Castle Black", "country" : "The North" }Spring中文文档

日期Spring中文文档

1561543964015Spring中文文档

localDateTimeSpring中文文档

2018-01-02T12:13:14Spring中文文档

下表显示了上一个类中的数据在平面映射中的显示方式:Spring中文文档

表 2.平面映射
哈希字段 价值

名字Spring中文文档

JonSpring中文文档

姓氏Spring中文文档

SnowSpring中文文档

地址.citySpring中文文档

Castle BlackSpring中文文档

地址.countrySpring中文文档

The NorthSpring中文文档

日期Spring中文文档

1561543964015Spring中文文档

localDateTimeSpring中文文档

2018-01-02T12:13:14Spring中文文档

扁平化要求所有属性名称不干扰 JSON 路径。使用拼合时,不支持在地图键中使用点或括号或用作属性名称。生成的哈希值无法映射回 Object。
java.util.Date并用毫秒表示。JSR-310 如果日期/时间类型在类路径上,则序列化为其窗体。java.util.CalendartoStringjackson-datatype-jsr310
表 1.法线映射
哈希字段 价值

名字Spring中文文档

JonSpring中文文档

姓氏Spring中文文档

SnowSpring中文文档

地址Spring中文文档

{ "city" : "Castle Black", "country" : "The North" }Spring中文文档

日期Spring中文文档

1561543964015Spring中文文档

localDateTimeSpring中文文档

2018-01-02T12:13:14Spring中文文档

表 2.平面映射
哈希字段 价值

名字Spring中文文档

JonSpring中文文档

姓氏Spring中文文档

SnowSpring中文文档

地址.citySpring中文文档

Castle BlackSpring中文文档

地址.countrySpring中文文档

The NorthSpring中文文档

日期Spring中文文档

1561543964015Spring中文文档

localDateTimeSpring中文文档

2018-01-02T12:13:14Spring中文文档

扁平化要求所有属性名称不干扰 JSON 路径。使用拼合时,不支持在地图键中使用点或括号或用作属性名称。生成的哈希值无法映射回 Object。
java.util.Date并用毫秒表示。JSR-310 如果日期/时间类型在类路径上,则序列化为其窗体。java.util.CalendartoStringjackson-datatype-jsr310