1.x版本的配置
SpringBoot 1.x 和 2.x 使用Redis作为缓存 设置有效时间和自动更新
因为我这边用的是2.0的版本所有图片中的方法不存在

下面是1.x版本的代码

    /**
     * 1.XX版本的配置
     *
     * @author yangjikang
     * @param redisTemplate
     * @return
     */
    @Bean
    public RedisCacheManager myRedisCacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        //默认使用cacheNames作为key的前缀
        cacheManager.setUsePrefix(true);
        //设置缓存过期时间(秒)
        cacheManager.setDefaultExpiration(45);
        return cacheManager;
    }

2.x版本的配置
SpringBoot 1.x 和 2.x 使用Redis作为缓存 设置有效时间和自动更新
下面是2.x版本的代码

  /**
     * 2.XX版本的配置
     *
     * @author yangjikang
     * @param factory
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();  // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
        config = config.entryTtl(Duration.ofMinutes(2))     // 设置缓存的默认过期时间,也是使用Duration设置
                .disableCachingNullValues();     // 不缓存空值

        // 设置一个初始化的缓存空间set集合
        Set<String> cacheNames = new HashSet<>();
        cacheNames.add("catalog_test_id");
        cacheNames.add("catalog_test_name");

        // 对每个缓存空间应用不同的配置
        Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
        configMap.put("catalog_test_id", config);
        configMap.put("catalog_test_name", config.entryTtl(Duration.ofMinutes(5)));

        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)     // 使用自定义的缓存配置初始化一个cacheManager
                .initialCacheNames(cacheNames)  // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
                .withInitialCacheConfigurations(configMap)
                .build();
        return cacheManager;
    }

该方法设置的缓存大概原理就是存储在redis的时候,会给这个key添加一个时间(你设置的时间),下次查询该key的时候redis
会去判断该key的生效时间,如果到期了,就会把这个值清理掉。你需要重新查询数据库,把新的结果放入redis(这里网友说了一个分布式的问题,但我这里还有研究,网友的意思大概是,两个线程同时去获取这个key,第一个线程获取的时候发现超时了,但是redis先是清了value,再清理key。此时key并没有清理,第二个线程进查询的value就是null.这个问题感兴趣的同学可以自己试一下,解决方案,可以把原来先判断key is exist换成 value is exist )

想看2.x版本更新的详细信息可以查看https://blog.csdn.net/yingziisme/article/details/81463391
本文2.x代码引荐这里

相关文章:

  • 2022-02-13
  • 2022-12-23
  • 2022-01-20
  • 2021-07-11
  • 2022-12-23
  • 2022-12-23
  • 2021-05-26
  • 2022-12-23
猜你喜欢
  • 2022-02-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
相关资源
相似解决方案