【 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

相关推荐
shixiaoyu66620 分钟前
Redis主从原理及哨兵搭建
redis
j7~37 分钟前
【MYSQL】在Centos7和ubuntu22.04环境下安装
数据库·c++·mysql·ubuntu·centos
环流_37 分钟前
redis:持久化rdb
java·数据库·redis
Donk_671 小时前
MariaDB 数据库管理手册
数据库·mariadb
阿洛学长1 小时前
PostgreSQL 超详细安装与使用教程:从入门到实战
数据库·postgresql
许彰午1 小时前
Oracle Redo日志与Undo回滚段损坏恢复实战
数据库·oracle
qxwlcsdn1 小时前
mysql在事务中执行DDL的后果_MySQL 8.0之前的限制
jvm·数据库·python
難釋懷1 小时前
Redis通信协议-基于Socket自定义Redis的客户端
数据库·redis·缓存
环流_1 小时前
redis:AOF
数据库·redis·spring
2401_884454152 小时前
如何防止SQL触发器导致性能下降_通过精简触发器逻辑
jvm·数据库·python