redis springboot 序列化设置json
时间: 2025-07-16 07:27:01 浏览: 8
在 Spring Boot 中配置 Redis 的序列化方式为 JSON,可以通过自定义 `RedisTemplate` 幺实现。默认情况下,Spring Boot 使用 `JdkSerializationRedisSerializer` 来进行对象的序列化,这种方式生成的字节流不易于调试和阅读。使用 JSON 格式可以提高可读性,并且方便与其他系统交互。
### 自定义 Redis 序列化配置
为了将 Redis 的键值以 JSON 格式存储,需要重新配置 `RedisTemplate` 和 `StringRedisSerializer` 用于 key,同时使用 `GenericJackson2JsonRedisSerializer` 或者自定义的 `Jackson2JsonRedisSerializer` 来处理 value。
#### 配置示例
以下是一个完整的配置类示例:
```java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 设置 key 的序列化方式为 String
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
// 设置 value 的序列化方式为 JSON
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.afterPropertiesSet();
return template;
}
}
```
上述代码中,`GenericJackson2JsonRedisSerializer` 是 Spring Data Redis 提供的一个内置 JSON 序列化器,它会自动将 Java 对象转换为 JSON 字符串并反向解析[^4]。
#### 使用 Jackson2JsonRedisSerializer 自定义类型
如果希望更精细地控制序列化过程或仅针对特定类型进行优化,可以使用 `Jackson2JsonRedisSerializer` 并指定具体的类类型:
```java
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
// 使用泛型的 JSON 序列化器
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class, YourCustomClass.class);
template.setValueSerializer(serializer);
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
```
在这个例子中,`YourCustomClass` 是你希望存储的对象类型。通过这种方式,可以确保只对特定类型的对象进行序列化/反序列化操作[^1]。
### 测试配置
完成配置后,可以通过注入 `RedisTemplate` 来测试是否能够正确地将数据以 JSON 格式写入 Redis:
```java
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void testRedisSerialization() {
String key = "testKey";
YourCustomClass value = new YourCustomClass("exampleData");
// 存储数据到 Redis
redisTemplate.opsForValue().set(key, value);
// 从 Redis 获取数据
YourCustomClass retrievedValue = (YourCustomClass) redisTemplate.opsForValue().get(key);
System.out.println(retrievedValue.getData()); // 输出: exampleData
}
```
这段代码演示了如何使用配置好的 `RedisTemplate` 将一个自定义对象存入 Redis 并再次取出。由于已经设置了正确的序列化器,因此可以直接操作对象而无需手动转换为 JSON 字符串[^3]。
---
阅读全文
相关推荐


















