前言:
1、基于spring-boot工程实验,使用spring-data-redis进行说明;
2、spring-data-redis提供了redisTemplate、stringRedisTemplate对redis进行操纵;
3、spring-data-redis提供的redisSerializer如下图:
4、stringRedisTemplate默认使用StringRedisSerializer序列化器;
5、redisTemplate默认使用JdkSerializationRedisSerializer;
实验详述如下:
1、boot版本、redis版本如下:
2、redis配置项如下:
3、修改redisTemplate默认序列化器;
1)key的序列化器,可通过setKeySerializer进行设置;
2)value的序列化器,可通过setValueSerializer进行设置;
4、保存实体结构如下:
当使用JdkSerializationRedisSerializer器,实体类需实现Serializable接口;
5、key使用StringRedisSerializer序列化,value使用JdkSerializationRedisSerializer,使用redisTemplate保存、读取person对象;
结果如下:
1)对象保存时,被JdkSerializationRedisSerializer序列化,然后保存进了redis,结构如下图:
2)对象读取出时,被JdkSerializationRedisSerializer反序列化成Person对象;
6、key使用StringRedisSerializer器,value使用GenericJackson2JsonRedisSerializer器,使用redisTemplate保存、读取person对象;
结果如下:
1)对象保存时,被GenericJackson2JsonRedisSerializer序列化,将对象的classType及对象信息保存进了redis,结构如下图:
2)对象读取出时,被GenericJackson2JsonRedisSerializer根据里面的class信息反序列化成Person对象;
7、使用自定义方式保存、读取对象;
1)保存对象进redis,其本质都是将对象,根据某种规则,变成字符串,保存进去。读取的时候,将字符串读取出来,然后根据该规则的反转,将字符串变为对象;
2)在7这种方式中,还是沿用obj2Json、json2Obj的方式进行实现;
3)redis操纵,使用stringRedisTemplate;
4)json转换,使用jackson;
结果如下:
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