SpringBoot 2.x 整合 redis 做缓存遇到的问题及1.0到2.0的缓存配置变动

前言

因为业务需要使用Spring Cache作为缓存。而我在百度找到的结果都是2.0之前的,Spring Data Redis的CacheManager的实现RedisCacheManager发生了很大变动,配置无法向下兼容,以下是2.0之前的配置。

    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        return cacheManager;
    }

查看文档Spring Data Redis 2.1.0 Document,发现以下变动

 

1、引入spring-redis的依赖

首先使用maven引入spring-redis相关的依赖,2.0中使用spring-boot-starter-data-redis代替了原来的spring-boot-starter-redis

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、配置redis数据库

在SpringBoot的application.yml配置文件中配置redis数据库的相关信息,这里改动主要有两点,其一是时间相关的属性,如spring.redis.timeout,在1.0中,时间相关的配置参数类型为int,默认单位为毫秒,配置中只需指定具体的数字即可,而在2.0中,时间相关的配置的参数类型都改为了jdk1.8的Duration,因此在配置文件中配置redis的连接超时时间timeout时,需要加入时间单位,如60s;其二是,在2.0中配置redis的连接池信息时,不再使用spring.redis.pool的属性,而是直接使用redis的lettuce或jedis客户端来配置,具体配置信息如下:
 

spring:  
     redis:
        database: 0 # Redis数据库索引(默认为0)
        host: localhost  # Redis服务器地址
        port: 6379  # Redis服务器连接端口
        password:    # Redis服务器连接密码(默认为空)
        timeout: 6000ms  # 连接超时时长(毫秒)
    
        #    Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成 Lettuce
        #    jedis:
        #      pool:
        #        max-active: 10000  # 连接池最大连接数(使用负值表示没有限制)
        #        max-wait: -1      # 连接池最大阻塞等待时间(使用负值表示没有限制)
        #        max-idle: 10      # 连接池中的最大空闲连接
        #        min-idle: 5       # 连接池中的最小空闲连接
        lettuce:
          pool:
            max-active: 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
            max-wait: -1  # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
            max-idle: 8   # 连接池中的最大空闲连接 默认 8
            min-idle: 0   # 连接池中的最小空闲连接 默认 0

3、配置CacheManager

通过配置Spring的CacheManager为redis,即可指定使用redis做缓存,具体的配置方式跟1.0也有所不同,在1.0中使用RedisTemplate即可实例化一个RedisCacheManager,但是在2.0中删除了这个构造器,同时也不可以通过之前的setDefaultExpiration方法设置默认的缓存过期时间等,在新版本中可以通过以下的两种方式构造一个RedisCacheManager:
1.通过RedisCacheManager的静态方法create(方式一):

@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
    RedisCacheManager cacheManager = RedisCacheManager.create(factory);
    return cacheManager;
}

这样产生的cacheManager只是使用Spring提供的默认配置。

2.通过Spring提供的RedisCacheConfiguration类,构造一个自己的redis配置类,再利用RedisCacheManager中的builder.build()的方式生成cacheManager(方式二): 

    @Bean
    public CacheManager cacheManager(@Qualifier(value = "jedisConnectionFactory") RedisConnectionFactory factory) {

        return RedisCacheManager.builder(factory)// 使用自定义的缓存配置初始化一个cacheManager
                .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig()
                        .entryTtl(Duration.ofMinutes(5))//缓存五分钟
                        .disableCachingNullValues()// 不缓存空值
                )
                .transactionAware()
                .build();
    }

修改后发现已经起作用了

再看一下默认的配置,包含了默认的缓存时间及序列化的相关配置:

 

到这里从1.0更新到2.0时,redis缓存的相关配置就差不多了,其他的可以看上面给出的官方文档。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值