SpringBoot 使用RedisTemplate存储键值出现乱码

本文介绍了解决使用redisTemplate存储后键值出现十六进制编码的问题,通过配置自定义的序列化方式,将默认序列化替换成Jackson2JsonRedisSerializer,并设置key的序列化规则为StringRedisSerializer,有效避免了键值被错误编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用redisTemplate 存储后的键出现 \x 十六进制编码
如:

"online_699"
"\xac\xed\x00\x05t\x00\x0eallotment_3183"
"\xac\xed\x00\x05t\x00\x0eENCRY_KEY:3183"
"\xac\xed\x00\x05t\x00\x0eENCRY_KEY:3233"
"\xac\xed\x00\x05t\x00\x0eallotment_3187"
"\xac\xed\x00\x05t\x00\nWEBRTC:251"
  • 解决方法如下:
  • 添加如下配置,重启项目。

	@Bean
	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
		RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
		redisTemplate.setConnectionFactory(redisConnectionFactory);
 
		// 使用Jackson2JsonRedisSerialize 替换默认序列化
		Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
 
		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
 
		jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
 
		// 设置value的序列化规则和 key的序列化规则
		redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
		redisTemplate.setKeySerializer(new StringRedisSerializer());
 
		redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);
		redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
 
		redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer);
		redisTemplate.setEnableDefaultSerializer(true);
		redisTemplate.afterPropertiesSet();
		return redisTemplate;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值