栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot中,使用RedisTemplate时的序列化方式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot中,使用RedisTemplate时的序列化方式

在SpringBoot中使用RedisTemplate,如果不指定序列化的方式,就会导致redis的key及value的可读性变差,所以,我们需要使用序列化的工具类,来序列化和反序列化数据。
注:

1.本文对于数据的key,都是用StringRedisSerializer的序列化方式,保证可读性。
2.使用同一批数据,不同的的序列化方式保存

@SpringBootTest
@RunWith(SpringRunner.class)
public class AuditDataApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1(){
        List list=new ArrayList<>();
        //数据1
        Value value1=new Value();
        value1.setId("1");
        value1.setName("测试名称1");
        value1.setValue("测试值1");

        //数据2
        Value value2=new Value();
        value2.setId("2");
        value2.setName("测试名称2");
        value2.setValue("测试值2");
        list.add(value1);
        list.add(value2);

        redisTemplate.opsForValue().set("test", list);
    }
}

1.JdkSerializationRedisSerializer

优点:序列化后的长度最短,时间适中。
缺点:不是明文显示。

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
       	//采用JdkSerializationRedisSerializer序列化后的长度最短,时间适中,但不是明文显示
        JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();
        
        // 设置值(value)的序列化
        redisTemplate.setValueSerializer(jdkSerializationRedisSerializer);
        redisTemplate.setHashValueSerializer(jdkSerializationRedisSerializer );
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

结果

2.Jackson2JsonRedisSerializer

优点:序列化速度最快,长度适中
缺点:在使用过程中,timestamp类型的数据以long类型存储,反序列化会出现问题,如果存入redis的数据不存在这种特殊情况,推荐使用这种。

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //采用Jackson2JsonRedisSerializer序列化速度最快,长度适中,
        // 但会使存入redis中timestamp类型的数据以long类型存储,明文显示
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(List.class);

        // 设置值(value)的序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer );
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

结果:

3.GenericJackson2JsonRedisSerializer

优点:明文显示,在redis中显示了@class字段保存有类型的包路径,反序列化更容易。
缺点:序列化时间最长,长度最大

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //采用GenericJackson2JsonRedisSerializer序列化时间最长,长度最大,明文显示
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        // 设置值(value)的序列化
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer );
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

结果:

总结

对于不同的情况可以使用不同的序列化方式,比较推荐使用JdkSerializationRedisSerializer和Jackson2JsonRedisSerializer,在保证速度的情况下,还能兼顾数据占用大小和明文显示。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号