Hash Mapping
使用 Redis 中的各种数据结构可以存储数据。Jackson2JsonRedisSerializer
可以转换 JSON 格式的对象。理想情况下,可以通过使用普通键将 JSON 存储为值。你可以通过使用 Redis 哈希对结构化对象进行更精细的映射。Spring Data Redis 根据用例提供将数据映射到哈希的各种策略:
-
直接映射,通过使用
HashOperations
和一个 serializer -
Using Redis Repositories
-
Using
HashMapper
andHashOperations
Hash Mappers
哈希映射器是将映射对象转换为 Map<K, V>
及其转换回映射对象的转换器。HashMapper
旨在与 Redis 哈希一起使用。
有多种实现可用:
-
BeanUtilsHashMapper
using Spring’s BeanUtils. -
ObjectHashMapper
using Object-to-Hash Mapping. -
<<`Jackson2HashMapper`,redis.hashmappers.jackson2>> using FasterXML Jackson.
以下示例展示了一种实现哈希映射的方法:
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);
}
}
Jackson2HashMapper
Jackson2HashMapper
通过使用 FasterXML Jackson 为域对象提供 Redis 哈希映射。Jackson2HashMapper
可将顶级属性映射为哈希字段名称,并可选择平铺结构。简单类型映射到简单值。复杂类型(嵌套对象、集合、映射等)表示为嵌套 JSON。
展开为所有嵌套属性创建单独的哈希条目,并在可能的情况下将复杂类型解析为简单类型。
考虑以下类及其包含的数据结构:
public class Person {
String firstname;
String lastname;
Address address;
Date date;
LocalDateTime localDateTime;
}
public class Address {
String city;
String country;
}
下表显示前一个类中的数据在普通映射中将如何显示:
Hash Field | Value |
---|---|
firstname |
|
lastname |
|
address |
|
date |
|
localDateTime |
|
下表显示前一个类中的数据在平面映射中将如何显示:
Hash Field | Value |
---|---|
firstname |
|
lastname |
|
address.city |
|
address.country |
|
date |
|
localDateTime |
|
拍平要求所有属性名不得干扰 JSON 路径。在将平铺用于键值对或属性名时,不支持使用圆点或括号。生成 Hash 无法映射回对象。 |
|