Hash 映射
数据可以通过 Redis 中的各种数据结构来存储。Jackson2JsonRedisSerializer
可以将对象转换为 JSON 格式。理想情况下,JSON 可以作为值使用普通键来存储。通过使用 Redis 哈希,可以实现更复杂的结构化对象映射。Spring Data Redis 提供了多种将数据映射到哈希的策略(具体取决于使用场景):
- 直接映射,通过使用
HashOperations
和序列化器。 - 使用 Redis 仓库。
- **使用
HashMapper
和HashOperations
**。
一、Hash 映射器
哈希映射器是将映射对象转换为 Map<K, V>
及其反向转换的工具。HashMapper
旨在与 Redis 哈希一起使用。
有多种实现可供选择:
- BeanUtilsHashMapper:使用 Spring 的
BeanUtils
。 - ObjectHashMapper:使用对象到哈希的映射。
- Jackson2HashMapper:使用 FasterXML Jackson。
以下示例显示了实现哈希映射的一种方法:
1 | public class Person { |
Jackson2HashMapper
Jackson2HashMapper
通过使用 FasterXML Jackson
为域对象提供 Redis 哈希映射。Jackson2HashMapper
可以将顶级属性映射为哈希字段名称,并且可以选择性地展平结构。简单类型映射为简单值。复杂类型(嵌套对象、集合、映射等)表示为嵌套的 JSON。
展平会为所有嵌套属性创建单独的哈希条目,并尽可能将复杂类型解析为简单类型。
考虑以下类及其包含的数据结构:
1 | public class Person { |
下表显示了前一类中的数据在正常映射中的显示方式:
Hash Field | Value |
---|---|
firstname | Jon |
lastname | Snow |
address | { "city" : "Castle Black", "country" : "The North" } |
date | 1561543964015 |
localDateTime | 2018-01-02T12:13:14 |
下表显示了前一类中的数据在展平映射中的显示方式:
Hash Field | Value |
---|---|
firstname | Jon |
lastname | Snow |
address.city | Castle Black |
address.country | The North |
date | 1561543964015 |
localDateTime | 2018-01-02T12:13:14 |
展平要求所有属性名称不能与 JSON 路径冲突。在使用展平时,不支持在映射键或属性名称中使用点或括号。展平后的哈希无法再映射回对象。
java.util.Date
和 java.util.Calendar
以毫秒表示。如果类路径中包含 jackson-datatype-jsr310
,则 JSR-310 日期/时间类型将序列化为其 toString
形式。
相关链接
Hash Mapping :: Spring Data Redis
OB links
OB tags
#Redis #Spring
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 z2huo!
评论