RedisTemplate 的 6 个可配置序列化器属性对比
RedisTemplate 提供了以下 6 个核心属性,用于分别配置键、值、哈希类型数据的序列化方式:
1. keySerializer
- 作用:定义 Redis 键的序列化方式。
- 默认值:
JdkSerializationRedisSerializer
(若未显式配置stringSerializer
)。 - 推荐序列化器:
StringRedisSerializer
:键通常为字符串,推荐使用此序列化器。
- 适用场景:确保键为可读的字符串格式。
2. valueSerializer
- 作用:定义 Redis 值的序列化方式。
- 默认值:
JdkSerializationRedisSerializer
。 - 推荐序列化器:
GenericJackson2JsonRedisSerializer
:复杂对象自动序列化。FastjsonRedisSerializer
:高性能 JSON 序列化。
- 适用场景:存储复杂对象或需要类型信息的场景。
3. hashKeySerializer
- 作用:定义 Redis 哈希类型键(如
hset key field value
中的field
)的序列化方式。 - 默认值:与
keySerializer
相同。 - 推荐序列化器:
StringRedisSerializer
:哈希字段通常为字符串。
- 适用场景:确保哈希键的可读性。
4. hashValueSerializer
- 作用:定义 Redis 哈希类型值的序列化方式。
- 默认值:与
valueSerializer
相同。 - 推荐序列化器:
Jackson2JsonRedisSerializer
:固定类型值的 JSON 序列化。
- 适用场景:存储结构化的哈希值(如对象属性)。
5. stringSerializer
-
作用:基础字符串序列化器,影响其他属性的默认行为。
-
默认值:
StringRedisSerializer
。 -
推荐配置:
- 统一设置
stringSerializer
可简化键和值的配置:template.setKeySerializer(template.getStringSerializer());
- 统一设置
-
适用场景:全局统一字符串处理。
6. defaultSerializer
- 作用:当其他属性未显式配置时的默认序列化器。
- 默认值:
JdkSerializationRedisSerializer
。 - 推荐配置:
- 若需统一默认行为,可设置为
GenericJackson2JsonRedisSerializer
。
- 若需统一默认行为,可设置为
- 适用场景:快速配置全局序列化方式。
对比表格
属性 | 作用域 | 默认值 | 推荐序列化器 | 适用场景 |
---|---|---|---|---|
keySerializer | Redis 键 | JdkSerialization | StringRedisSerializer | 确保键为可读字符串 |
valueSerializer | Redis 值 | JdkSerialization | GenericJackson2Json Fastjson | 复杂对象或需要类型信息的场景 |
hashKeySerializer | 哈希字段(field) | 同 keySerializer | StringRedisSerializer | 确保哈希键可读 |
hashValueSerializer | 哈希值(value) | 同 valueSerializer | Jackson2Json Fastjson | 结构化哈希值(如对象属性) |
stringSerializer | 基础字符串配置 | StringRedisSerializer | 无需修改(直接使用) | 统一字符串处理 |
defaultSerializer | 全局默认值 | JdkSerialization | GenericJackson2Json | 快速统一序列化配置 |
配置示例
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 1. 键的序列化器(推荐 String)template.setKeySerializer(new StringRedisSerializer());// 2. 值的序列化器(推荐 JSON)template.setValueSerializer(new GenericJackson2JsonRedisSerializer());// 3. 哈希键的序列化器(与 key 保持一致)template.setHashKeySerializer(new StringRedisSerializer());// 4. 哈希值的序列化器(固定类型可选 Jackson2Json)template.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(User.class));// 5. stringSerializer 默认已配置,可继承template.setStringSerializer(new StringRedisSerializer());// 6. defaultSerializer 全局默认(可选)template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());return template;
}
总结建议
- 键和哈希键:始终使用
StringRedisSerializer
,确保可读性。 - 值和哈希值:
- 复杂对象 →
GenericJackson2JsonRedisSerializer
(自动类型)。 - 固定类型 →
Jackson2JsonRedisSerializer
或Fastjson
。
- 复杂对象 →
- 全局配置:
- 通过
stringSerializer
统一基础字符串处理。 defaultSerializer
用于快速覆盖未显式配置的场景。
- 通过
根据具体需求选择序列化器,平衡性能、可读性和类型安全性!