今天在学习 Spring Boot 整合缓存的时候,遇到了这样的问题,从数据库中查出的数据放到 Redis 中,在 Windows 上用 RedisDesktopManager 打开出现了乱码的问题。
查了资料知道原因是 Spring Boot 集成 Redis 时,自动配置了 RedisCacheManager,但是 RedisCacheManager 默认使用的是 JdkSerializationRedisSerializer,该序列化方式使用的二进制形式存储的数据。
解决方案
自己配置一个缓存管理器,设置 key 的序列化采用 StringRedisSerializer,设置 value 的序列化采用Jackson2JsonRedisSerializer,将自定义的缓存处理器加到容器中。
@Configuration
public class MyRedisConfig {
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
// 配置序列化(解决乱码的问题)
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}
重新启动项目,这样就大功告成了!