Springboot集成redis以及解决rediskey乱码的问题
SpringBoot集成Redis时,需添加依赖并配置连接信息。默认RedisTemplate采用JdkSerializationRedisSerializer,导致key在Redis中显示为二进制乱码。通过自定义RedisTemplate,将key序列化器改为StringRedisSerializer,value改用Jackson2JsonRedisSer
Spring Boot 集成 Redis,那点事儿
先聊聊如何在Spring Boot里集成Redis,以及一个几乎每个人都会撞上的坑——key乱码。这事儿说大不大,但如果不处理,线上排查问题的时候看着那堆乱码,心态很容易崩。下面直接上操作,把关键步骤和解决方案一并说清楚。
第一步,添加依赖
既然要用SpringBoot,Redis的依赖自然是标配。这里需要两个东西:一个是Spring Boot官方提供的Redis starter,另一个是连接池的依赖。前者负责核心功能,后者负责管理连接资源,不然高并发下连接数会炸。
org.springframework.boot spring-boot-starter-data-redis org.apache.commons commons-pool2
第二步,配置文件里把连接信息填好
依赖加完后,直接去翻 RedisAutoConfiguration 里的 RedisProperties 配置。在 application.yml 里写上Redis的地址、端口、以及连接池参数。注意,Lettuce是Spring Boot 2.x之后默认的Redis客户端,不需要额外配置,但连接池的开关得手动打开。
spring:
redis:
host: xxxxxx 自己的ip
port: 6379
lettuce:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
第三步,问题出现了
按照常规步骤,注入 RedisTemplate 或 StringRedisTemplate 跑个测试,看起来一切正常。

但等你跑到服务器上用 redis-cli 看一眼,发现key变成了类似 \xac\xed\x00\x05t\x00…… 这样的一串乱码。

怎么回事?
核心原因在于,lettuce客户端连接Redis服务器时,采用的是byte数组传输。默认情况下,RedisTemplate 使用 JdkSerializationRedisSerializer 将对象序列化成字节数组。这个方案虽然通用,但也直接把可读的key变成了二进制乱码。换句话说,不是Redis出了问题,是序列化策略出了问题。

第四步,自定义RedisTemplate,把序列化方案换掉
解决方案很简单:自己写一个 RedisConfig,把默认的 RedisTemplate 替换掉,换成 StringRedisSerializer 负责key,Jackson2JsonRedisSerializer 负责value。这样一来,key保持可读字符串,value则是JSON格式,对运维和开发都很友好。
@Configuration
@EnableCaching
public class RedisConfig {
/**
* 配置自定义redisTemplate
* @return
*/
@Bean
RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
// 设置值(value)的序列化采用Jackson2JsonRedisSerializer。
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置键(key)的序列化采用StringRedisSerializer。
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
配置完毕,重新跑一次代码。IDE里显示的结果已经正常了:

到服务器上看,key已经不再是乱码。但注意,如果value中包含中文,它依然会是Unicode转义后的形式,这跟Redis本身的数据存储方式有关,不影响使用。

总结
总结一下,集成Redis时遇到的key乱码问题,本质上是默认序列化策略不适合人类阅读。解决方案就是自定义 RedisTemplate,把key的序列化器换成 StringRedisSerializer。这个坑几乎每个Spring Boot + Redis的初学者都会遇到,但只要记住这个配置,后续就顺畅了。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















