RedisKey值出现\xAC\xED\x00\x05t\x00\x19原因分析及解决过程

 更新时间:2026年06月09日 10:42:09   作者:程序员卢仔  
Spring RedisTemplate缓存数据时遇到不友好的key字符串问题,通过分析源代码发现是序列化方式导致,建议使用自定义的StringRedisSerializer解决此问题

RedisKey值出现\xAC\xED\x00\x05t\x00\x19

在通过Spring RedisTemplate缓存数据的时候

发现key是一堆很不友好的东西,\xAC\xED\x00\x05t\x00.、\xAC\xED\x00\x05t\x00\x19、\xAC\xED\x00\x05t\x00\x11下面来分析一下。

1.分析spring-data的org.springframework.data.redis.core.RedisTemplate源代码

以后发现:

2.因为spring操作redis是在jedis客户端基础上进行的

而jedis客户端与redis交互的时候协议中定义是用byte类型交互,jedis中提供了string类型转为byte[]类型,但是看到spring-data-redis中RedisTemplate<K, V>

在操作的时候k,v是泛型的,所以RedisTemplate中有了上面那段代码,在没有特殊定义的情况下,spring默认采用defaultSerializer = new JdkSerializationRedisSerializer();来对key,value进行序列化操作,在经过查看JdkSerializationRedisSerializer中对序列化的一系列操作,发现如下代码:

3.序列化支持的是Object对象

调用了SerializingConverter类下的convert方法转换对象,转换对象的方法是:

4.原因其实就出现在这里

解决的办法就是手动定义序列化的方法,spring-data-redis中还提供了一个序列化的类专门针对string类型的序列化org.springframework.data.redis.serializer.StringRedisSerializer这个类,

我们在带有@Configuration注解的类中覆盖自动配置的RedisTemplate<Object,Object>,如下: 

@Bean
public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
// 设置redis连接
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.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 将redisTemplate的序列化方式更改为StringRedisSerializer
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}

覆盖自动配置的RedisTemplate<Object,Object>后,再次查询新存入的redisKey已恢复正常

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Redis缓冲区溢出及解决方案分享

    Redis缓冲区溢出及解决方案分享

    Redis缓冲区溢出是指Redis缓冲区被写入的数据超过了它的容量,导致数据无法存储或被覆盖。造成缓冲区溢出的原因可能是快速写入大量数据、缓冲区未及时刷新或Redis服务器配置不当等。
    2023-04-04
  • Redis如何统计用户访问量

    Redis如何统计用户访问量

    这篇文章主要介绍了Redis如何统计用户访问量问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Redis基本数据类型Zset有序集合常用操作

    Redis基本数据类型Zset有序集合常用操作

    这篇文章主要为大家介绍了redis基本数据类型Zset有序集合常用操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Redis配合SSDB实现持久化存储代码示例

    Redis配合SSDB实现持久化存储代码示例

    这篇文章主要介绍了Redis配合SSDB实现持久化存储代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作

    springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作

    这篇文章主要介绍了springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Redis Cluster集群增加和删除节点方式

    Redis Cluster集群增加和删除节点方式

    本文详细介绍了如何在Redis集群中添加和删除节点,包括启动新节点、分配槽位、设置从节点等操作步骤,通过这些步骤,确保Redis集群的稳定性和高效性
    2026-06-06
  • Redis 集群搭建和简单使用教程

    Redis 集群搭建和简单使用教程

    集群技术是构建高性能网站架构的重要手段,下面这篇文章主要介绍了Redis 集群搭建和简单使用教程,文中通过示例代码和图片介绍的很想,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
    2017-02-02
  • Linux下Redis安装配置教程

    Linux下Redis安装配置教程

    这篇文章主要为大家详细介绍了Linux下Redis安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Redis利用Pipeline加速查询速度的方法

    Redis利用Pipeline加速查询速度的方法

    这篇文章主要给大家介绍了关于Redis利用Pipeline加速查询速度的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • redis键空间通知使用实现

    redis键空间通知使用实现

    这篇文章主要介绍了redis键空间通知使用实现
    2021-08-08

最新评论