【 Redis】的乱码问题

问题描述:

使用RedisTemplate存储的数据,在 redis-cli 客户端查看时,key 和 value 都会携带类似\xac\xad\这样的字符串。

原因:

由于默认使用了 jdk 的序列化方式。以下是支持的序列化方式

项目一般都会有缓存,常常使用redis来存取缓存(现在已不推荐使用session存储缓存),我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。

解决方法:

在系统启动完后,初始化缓存序列化器。 将redisTemplate默认使用JdkSerializationRedisSerializer序列化 改为 stringRedis序列化方式。

key和value都使用String序列化:

注:

1. ApplicationRunner接口可以实现springboot应用启动后做一些初始化操作

2. 为什么使用Serializer

因为redis是以key-value的形式将数据存在内存中,key就是简单的string,key似乎没有长度限制,不过原则上应该尽可能的短小且可读性强,无论是否基于持久存储,key在服务的整个生命周期中都会在内存中,因此减小key的尺寸可以有效的节约内存,同时也能优化key检索的效率。

   value在redis中,存储层面仍然基于string,在逻辑层面,可以是string/set/list/map,不过redis为了性能考虑,使用不同的"encoding"数据结构类型来表示它们。(例如:linkedlist,ziplist等)。

   所以可以理解为,其实redis在存储数据时,都把数据转化成了byte\[\]数组的形式,那么在存取数据时,需要将数据格式进行转化,那么就要用到序列化和反序列化了,这也就是为什么需要配置Serializer的原因。

参考链接:https://blog.csdn.net/u010096624/article/details/109046714

源码追溯:https://blog.csdn.net/qq_16159433/article/details/121491555

多方法实现:https://blog.csdn.net/m4330187/article/details/108091447

相关推荐
三十..22 分钟前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
cfm_29141 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
真实的菜2 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
你想考研啊2 小时前
mysql数据库导出导入
数据库·mysql·oracle
十年编程老舅3 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql
The Sheep 20233 小时前
Vue复习
linux·服务器·数据库
云边有个稻草人3 小时前
深度解析:KingbaseES高可用架构落地原理与生产运维实战
数据库·读写分离·数据库运维·金仓数据库·国产数据库技术·数据备份恢复
满天星83035774 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt
郑洁文4 小时前
基于SpringBoot的商品仓库管理系统的设计与实现
java·spring boot·后端·仓库管理系统·商品仓库管理系统
我不介意孤独5 小时前
04-记忆系统为什么向量数据库不够用
数据库·人工智能·资源隔离·agent infra