Spring Data Redis的序列化

2019-11-22  本文已影响0人  OldChicken_

简介

Redis作为非关系型数据库,因为其高性能并发读写的特点而得到广泛的应用。
Spring作为Java应用框架,提供了一个轻量级的容器和非侵入性编程模型。
Spring Data Redis(SDR)框架通过Spring出色的基础架构支持消除了与存储库交互所需的冗余任务和样板代码,从而简化了编写使用Redis键值存储库的Spring应用程序的过程。

Redis的数据类型 vs 存入Redis的数据的数据类型

RedisTemplate及其序列化

RedisTemplate为Redis交互提供了高级抽象,用户只需要处理连接管理和序列化,无需处理其它细节,接受和返回二进制值(字节数组)等底层方法由RedisConnection负责。在Spring应用中使用RedisTemplate的方式为

  @Autowired
  private RedisTemplate<String, Long> template;

Spring Data Redis 默认使用JdkSerializationRedisSerializer作为其序列化工具

// RedisTemplate.java

    if (defaultSerializer == null) {
        defaultSerializer = new JdkSerializationRedisSerializer(
                classLoader != null ? classLoader : this.getClass().getClassLoader());
    }

StringRedisTemplate使用的注意事项

由于Redis中存储的键和值通常是java.lang.String,因此Redis模块提供了RedisConnectionRedisTemplate的两个扩展,分别是StringRedisConnectionStringRedisTemplate,其使用的序列化工具为StringRedisSerializer,这意味着存储的键和值是人类可读的。

StringRedisTemplate的注入和普通RedisTemplate的注入方式相同:

  @Autowired
  private StringRedisTemplate redisTemplate;

但实际上,StringRedisTemplate的还有一种更方便的注入方式。Spring自带的RedisAutoConfiguration中配置了,当没有自定义StringRedisTemplate Bean时,它会自动帮你注册一个该类型的Bean.

// RedisAutoConfiguration.java

        @Bean
        @ConditionalOnMissingBean(StringRedisTemplate.class)
        public StringRedisTemplate stringRedisTemplate(
                RedisConnectionFactory redisConnectionFactory)
                throws UnknownHostException {
            StringRedisTemplate template = new StringRedisTemplate();
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }

使用StringRedisTemplate的时候直接在代码中注入RedisTemplate<String, String>的RedisTemplate Bean,实际上StringRedisTemplate也继承自RedisTemplate<String, String>,Spring在自动装配Bean的时候会将自注册的Bean装配进来,这样的代码就省略了手动注册StringRedisTemplate的过程。

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
// StringRedisTemplate.java

public class StringRedisTemplate extends RedisTemplate<String, String> {
    ...
}
上一篇 下一篇

猜你喜欢

热点阅读