【 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

相关推荐
DolphinDB10 小时前
集成 Prometheus 与 DolphinDB 规则引擎,构建敏捷监控解决方案
数据库
IvorySQL10 小时前
PostgreSQL 技术日报 (3月10日)|IIoT 性能瓶颈与内核优化新讨论
数据库·postgresql·开源
小飞Coding11 小时前
Spring Boot 中关于 Bean 加载、实例化、初始化全生命周期的扩展点
spring boot
小飞Coding12 小时前
彻底搞懂 Spring 容器导入配置类:@EnableXXX 与 spring.factories 核心原理
spring boot
DBA小马哥13 小时前
时序数据库是什么?能源行业国产化替换的入门必看
数据库·时序数据库
爱可生开源社区16 小时前
某马来西亚游戏公司如何从 SQL Server 迁移至 OceanBase?
数据库
momo学习版16 小时前
带你实现基于 Redis 的分布式 Session 管理
redis
小瓦码J码18 小时前
PostgreSQL表名超长踩坑记
数据库·postgresql
yhyyht18 小时前
InfluxDB入门记录(三)flux-dsl
数据库·后端
IvorySQL1 天前
PostgreSQL 技术日报 (3月9日)|EXPLAIN ANALYZE 计时优化与复制语法讨论
数据库·postgresql·开源