springboot2.X Redis接口缓存

7 篇文章 0 订阅
1 篇文章 0 订阅
  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缓存名称的别名
conditionSpring SpEL 表达式,用来确定是否缓存
keySpEL 表达式,用来动态计算key
keyGeneratorBean 名字,用来自定义key生成算法,跟key不能同时用
unlessSpEL 表达式,用来否决缓存,作用跟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) {
    
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值