欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot2.X Redis接口缓存

程序员文章站 2022-07-07 11:26:32
...
  1. 不同接口使用不同配置。
    注解中的value值与配置中 RedisCacheConfiguration的key对应。可以指定方法使用的配置。
@Cacheable(value = "my-redis-cache1")

上面 value 值对应配置中 configMap 的 key

configMap.put("my-redis-cache1", config);
  1. 配置
@Configuration
public class CacheRedisConfiguration {
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        // 设置缓存的默认过期时间,也是使用Duration设置
        config = config.entryTtl(Duration.ofMinutes(1))
                // 不缓存空值
                .disableCachingNullValues();

        // 设置一个初始化的缓存空间set集合
        Set<String> cacheNames =  new HashSet<>();
        //"my-redis-cache1"对应 @Cacheable(value = "my-redis-cache1") 中的 value 值
        cacheNames.add("my-redis-cache1");
        cacheNames.add("my-redis-cache2");

        // 对每个缓存空间应用不同的配置
        Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
        configMap.put("my-redis-cache1", config);
        configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));

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


}
  1. 使用
    @Cacheable(value = "my-redis-cache2",unless = "#result==null")
    @PostMapping("/singleDictionary")
    public Item userName(Integer code) {
        System.out.println("123");
        return itemService.getOne(code);
    }
  1. @Cacheable 参数
参数 解释
cacheNames 缓存名称
value 缓存名称的别名
condition Spring SpEL 表达式,用来确定是否缓存
key SpEL 表达式,用来动态计算key
keyGenerator Bean 名字,用来自定义key生成算法,跟key不能同时用
unless SpEL 表达式,用来否决缓存,作用跟condition相反
sync 多线程同时访问时候进行同步
  1. 条件化缓存
  • unless
    仅阻止将对象放进缓存,在这个方法被调用的时候,依然会去缓存中进行查找,如果找到了匹配的值,就会返回找到的值。
  • condition
    如果表达式计算结果为false,那么在这个方法调用的过程中,缓存是被禁用的。即在这个方法被调用的时候,不会去缓存进行查找,同时返回值也不会放进缓存中。
  1. 自定义缓存 key 生成策略
@Component
public class MyKeyGenerator implements KeyGenerator {

    /**
     *  生成 key 的方法
     * @param target    调用缓存的对象
     * @param method 调用缓存的方法
     * @param params 方法的入参
     * @return               生成的 key
     */
    @Override
    public Object generate(Object target, Method method, Object... params) {
    
    }
}
相关标签: 缓存