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
可简化键和值的配置:javatemplate.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 |
快速统一序列化配置 |
配置示例
java
@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
用于快速覆盖未显式配置的场景。
- 通过
根据具体需求选择序列化器,平衡性能、可读性和类型安全性!