标注在方法上,存放方法的返回结果到缓存中。在目标方法执行之前执行。调用目标方法时,先去查询缓存,根据key查询数据,缓存中有对应数据的话,直接从缓存中取。如果没有对应数据的话,就执行目标方法,将返回结果放到缓存中
cacheNames/value:指定缓存组件的名字 key:缓存数据使用的key,默认是方法的参数值 keyGenerator:key的生成器,可以指定key的生成器组件id cacheManager/cacheResolver:缓存管理器/缓存解析器 二选一 condition:指定符合条件的才缓存 unless:当unless指定的条件为true,就不缓存。可以获取结果进行判断 sync:是否使用异步模式,默认为false
标注在方法上,在目标方法执行之后执行,将返回结果存放到缓存。
cacheNames/value:指定缓存组件的名字 key:缓存数据使用的key,默认是方法的参数值 keyGenerator:key的生成器,可以指定key的生成器组件id cacheManager/cacheResolver:缓存管理器/缓存解析器 二选一 condition:指定符合条件的才缓存 unless:当unless指定的条件为true,就不缓存。可以获取结果进行判断
标注在方法上,清空缓存。可以通过设置beforeInvocation参数,设置在目标方法之前还是之后执行。
cacheNames/value:指定缓存组件的名字 key:缓存数据使用的key,默认是方法的参数值 keyGenerator:key的生成器,可以指定key的生成器组件id cacheManager/cacheResolver:缓存管理器/缓存解析器 二选一 condition:指定符合条件的才清除 allEntries:清楚组件中所有缓存。默认为false beforeInvocation:在方法执行之前执行。默认为false。
标注在类上,设置公共属性。
cacheNames keyGenerator cacheManager cacheResolver
在Redis的自动配置类中,提供了两个bean来进行redis相关操作。StringRedisTemplate常用于操作String类型的数据,RedisTemplate常用于操作我们自定义的对象,需要将对象序列化进行存储。
来到RedisSerializer的接口下,可以看到它有很多的实现类,其中JdkSerializationRedisSerializer就是使用JDK序列化,Jackson2JsonRedisSerializer就是转成Json。
在RedisTemplate的类下可以看到RedisTemplaate默认使用的序列化机制是JdkSerializationRedisSerializer。
为了更高的可读性,我们可以将对象转成Json进行存储,这需要使用jackson2JsonRedisSerializer。重新向容器中添加一个redisTemplate01,将他的默认序列化机制改成Json序列化。
springboot2以前自定义CacheManger需要注入RedisTemplate。现在直接通过RedisCacheConfiguration设置序列化机制等属性。
@Bean public RedisCacheManager paymentCacheManager(RedisConnectionFactory factory){ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Payment.class); RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(15)) //设置缓存过期时间 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)); //s设置Json序列化机制 RedisCacheManager redisCacheManager = RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build(); return redisCacheManager; }还可以通过RedisCacheConfiguration设置很多其他属性。
如果定义多个CacheManger,需要在其中一个上面标注@Primary。在使用缓存注解时,通过cacheManager属性指定使用的CacheManger。
注入使用的CacheManger: @Autowired CacheManager userCacheManger;
获取缓存组件,存放数据 Cache cache = userCacheManger.getCache(“user”); cache.put(“custom”,user);
