redis的key出现的\xac\xed\x00\x05t\x00乱码问题及解决

 更新时间:2023年09月22日 14:46:36   作者:林志鹏JAVA  
这篇文章主要介绍了redis的key出现的\xac\xed\x00\x05t\x00乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

redis的key出现的\xac\xed\x00\x05t\x00乱码

在使用redis进行token的存取的时候,发现了一个严重的问题,那便是根据键获取值的时候一直拿不到,其实已经set进去了。

然后使用redis客户端,遍历所有的键的时候,发现键中有类似 \xac\xed\x00\x05t\x00 的乱码,

如下图

原因分析

spring-data-redis RedisTemplate<K, V>模板类 在操作redis时默认使用JdkSerializationRedisSerializer 来进行序列化。

spring操作redis是在jedis客户端基础上进行的,而jedis客户端与redis交互的时候协议中定义是用byte类型交互,看到spring-data-redis中RedisTemplate<K, V>在操作的时候k,v是泛型对象,而不是byte[]类型的,

这样导致的一个问题就是,如果不对RedisTemplate进行设置,spring会默认采用defaultSerializer = new JdkSerializationRedisSerializer();这个方法来对key、value进行序列化操作,JdkSerializationRedisSerializer它使用的编码是ISO-8859-1

解决办法一

在使用时,规定redisTemplate的类型

@Autowired 
private RedisTemplate<String,String> redisTemplate

解决办法二

添加 redis 配置类,配置使用的序列化方式

/**
 * @author linzp
 * @version 1.0.0
 * CreateDate 2020/8/18 22:26
 */
@Configuration
public class RedisConfig {
    @Bean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(redisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(redisSerializer);
        //key haspmap序列化
        template.setHashKeySerializer(redisSerializer);
        return template;
    }
}

解决方法三

使用 StringRedisTemplate 而不是使用 RedisTemplate

解决后,

验证结果如下图:

总结

问题到此得已解决~

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

相关文章

  • Windows系统一键启动Redis脚本

    Windows系统一键启动Redis脚本

    本文介绍了在Windows系统中创建一键启动Redis的脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Redis与RabbitMQ的区别对比和结合应用

    Redis与RabbitMQ的区别对比和结合应用

    RabbitMQ和Redis是两种流行的消息队列(Message Queue)和缓存系统,在应用程序开发中起着不同的角色和功能,Redis凭借内存存储和丰富数据结构实现高速缓存和分布式锁,RabbitMQ通过消息队列实现系统解耦和异步处理,二者结合可应对电商秒杀等高并发场景
    2025-10-10
  • 一篇文章揭秘Redis的磁盘持久化机制

    一篇文章揭秘Redis的磁盘持久化机制

    这篇文章主要给大家介绍了如何通过一篇文章揭秘Redis的磁盘持久化机制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Redis上实现分布式锁以提高性能的方案研究

    Redis上实现分布式锁以提高性能的方案研究

    这篇文章主要介绍了Redis上实现分布式锁以提高性能的方案研究,其中重点需要理解异步算法与锁的自动释放,需要的朋友可以参考下
    2015-12-12
  • SpringSession通过Redis统计在线用户数量的实现代码

    SpringSession通过Redis统计在线用户数量的实现代码

    这篇文章主要介绍了SpringSession通过Redis统计在线用户数量,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Redis热点Key独立集群实现方案(核心思路)

    Redis热点Key独立集群实现方案(核心思路)

    文章介绍了Redis热点Key独立集群实现方案,通过多实例配置、灵活的路由规则和统一的访问接口,实现资源隔离、灵活扩展、高可用性和统一管理,部署架构、注意事项和扩展建议也为方案的实施提供了指导,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • 深入探究RedisJSON模块的工作原理以及使用操作

    深入探究RedisJSON模块的工作原理以及使用操作

    Redis推出了RedisJSON模块,它允许开发者在Redis数据库中直接存储、查询和处理JSON数据,本文将详细介绍RedisJSON的工作原理、关键操作、性能优势以及使用场景,需要的朋友可以参考下
    2024-05-05
  • ​Redis 实现计数器和限速器的示例代码

    ​Redis 实现计数器和限速器的示例代码

    本文主要介绍了​Redis 实现计数器和限速器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • redis通过redis-dump镜像实现数据迁移

    redis通过redis-dump镜像实现数据迁移

    本文主要介绍了redis通过redis-dump镜像实现数据迁移,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Redis设置永久密码方式

    Redis设置永久密码方式

    找到Redis安装目录下的redis.windows.conf文件,搜索并设置requirepass参数为自定义密码,保存修改后重启服务,以增强安全性,此为个人经验,供参考
    2025-07-07

最新评论