Cachingprovider —> CachingManager —> Cache
1)如果指定特定范围内的日志控制台输出,可在application.properties里面配置:logging.level.com.atguigu.bootcache.mapper=debug
2)查看控制台引用
加上debug = true
可以查看哪些使用了哪些没被使用
3)定义全局的key的名称,下面的调用的地方value就可以不用写,如图
1)cacheNames/value:指定缓存组件的名字
2)key:缓存数据使用的key,默认使用方法的参数值(使用spEL表达式,表达式规则可参考ppt) 等同于keyGenerator,二选一使用
3)cacheManager:指定缓存管理器
4)cacheResolver:指定获取解析器(与管理器二选一)
5)condition:指定符合条件下才缓存
6)unless:当unless指定的条件为true,方法的返回值就不会被缓存
1)看CacheAutoConfiguration
2)运行步骤:
@CacheAble:先查缓存,再执行标记的方法
@CachePut:先执行方法,然后将值存入缓存
9.@CacheEvict:缓存清除
1)allEntries属性:是否全部删除,true是全部删除,不管指不指定key;
2)beforeInvocation:如果执行代码出错,可照样执行,如代码所示,默认是false
是@Cacheable、@CachePut、@CacheEvict的组合注解,复杂场景下可使用组合条件
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
redis默认访问端口 6379
(redis地址等)
spring.redis.host=192.168.1.113
(涉及两个redis模板类:StringRedisTemplate 和 RedisTemplate)
@Test
void contextLoads() {
stringRedisTemplate.opsForValue().append("msg","world"); System.out.println(stringRedisTemplate.opsForValue().get("msg"));
}
@Test
void test(){
DepartMent departMent = deptMapper.selectDept(9); redisTemplate.opsForValue().set("dept",departMent);
}
(这边的例子为将部门序列化入库)
jackson2JsonRedisSerializer :json的序列化器(且该对象需实现序列化 implements Serializable)
@Configuration
public class MyRedisConfig {
@Bean
public RedisTemplate<Object, DepartMent> myRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate<Object, DepartMent> template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer<DepartMent> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<DepartMent>(DepartMent.class); template.setDefaultSerializer(jackson2JsonRedisSerializer); //放入json的序列化器
return template;
}}
1)1.0版本
//缓存管理器
@Bean
public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
//设置缓存过期时间
cacheManager.setDefaultExpiration(10000);
return cacheManager;
} //缓存管理器
2)2.0版本
@Bean
public static RedisCacheManager create(RedisConnectionFactory connectionFactory) {
Jackson2JsonRedisSerializer<DepartMent> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<DepartMent>(DepartMent.class);
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofDays(1)) // 设置缓存过期时间为一天 .disableCachingNullValues() // 禁用缓存空值,不缓存null校验 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)); // 设置CacheManager的值序列化方式为json序列化,可加入@Class属性 return RedisCacheManager.builder(connectionFactory).cacheDefaults(cacheConfiguration).build(); // 设置默认的cache组件 }