005 spring-data-redis的序列化反序列化

前言:

1、基于spring-boot工程实验,使用spring-data-redis进行说明;

2、spring-data-redis提供了redisTemplate、stringRedisTemplate对redis进行操纵;

3、spring-data-redis提供的redisSerializer如下图:

005 spring-data-redis的序列化反序列化_第1张图片

4、stringRedisTemplate默认使用StringRedisSerializer序列化器;

5、redisTemplate默认使用JdkSerializationRedisSerializer;

实验详述如下:

1、boot版本、redis版本如下:

005 spring-data-redis的序列化反序列化_第2张图片

 

005 spring-data-redis的序列化反序列化_第3张图片

 

2、redis配置项如下:

3、修改redisTemplate默认序列化器;

1)key的序列化器,可通过setKeySerializer进行设置;

2)value的序列化器,可通过setValueSerializer进行设置;

005 spring-data-redis的序列化反序列化_第4张图片

4、保存实体结构如下:

当使用JdkSerializationRedisSerializer器,实体类需实现Serializable接口;

005 spring-data-redis的序列化反序列化_第5张图片

5、key使用StringRedisSerializer序列化,value使用JdkSerializationRedisSerializer,使用redisTemplate保存、读取person对象;

005 spring-data-redis的序列化反序列化_第6张图片

005 spring-data-redis的序列化反序列化_第7张图片

结果如下:

1)对象保存时,被JdkSerializationRedisSerializer序列化,然后保存进了redis,结构如下图:

2)对象读取出时,被JdkSerializationRedisSerializer反序列化成Person对象;

6、key使用StringRedisSerializer器,value使用GenericJackson2JsonRedisSerializer器,使用redisTemplate保存、读取person对象;

005 spring-data-redis的序列化反序列化_第8张图片

005 spring-data-redis的序列化反序列化_第9张图片

结果如下:

1)对象保存时,被GenericJackson2JsonRedisSerializer序列化,将对象的classType及对象信息保存进了redis,结构如下图:

2)对象读取出时,被GenericJackson2JsonRedisSerializer根据里面的class信息反序列化成Person对象;

7、使用自定义方式保存、读取对象;

1)保存对象进redis,其本质都是将对象,根据某种规则,变成字符串,保存进去。读取的时候,将字符串读取出来,然后根据该规则的反转,将字符串变为对象;

2)在7这种方式中,还是沿用obj2Json、json2Obj的方式进行实现;

3)redis操纵,使用stringRedisTemplate;

4)json转换,使用jackson;

005 spring-data-redis的序列化反序列化_第10张图片

结果如下:

1)对象保存时,被jackson序列化为json字符串,保存进redis,如下图:

2)对象读取时,根据传入的classType,反序列化为person对象;

8、对比5、6、7方式;

1)JdkSerializationRedisSerializer序列化内容冗余,占用内存最高;

2)GenericJackson2JsonRedisSerializer序列化内容仅冗余了class信息,内存占用少;

3)自定义jackson序列化,内容不冗余,内存占用最少;

4)基于100万条数据存、读测试下,6、7方式在性能上几乎相同。

9、demo地址:

https://github.com/haishui211/redisRep.git

你可能感兴趣的:(java_web)