springboot学习之旅09-缓存

一、spring缓存抽象

在这里插入图片描述
idea向导引入cache、mysql、web(便于测试)


1.走向:

Cachingprovider —> CachingManager —> Cache
在这里插入图片描述


2.要使用缓存的话,需要在启动类上使用@EnableCaching


3.小知识点:

1)如果指定特定范围内的日志控制台输出,可在application.properties里面配置:logging.level.com.atguigu.bootcache.mapper=debug

2)查看控制台引用
加上debug = true
在这里插入图片描述
可以查看哪些使用了哪些没被使用

3)定义全局的key的名称,下面的调用的地方value就可以不用写,如图
在这里插入图片描述


4.@Cacheable的几个属性

1)cacheNames/value:指定缓存组件的名字

2)key:缓存数据使用的key,默认使用方法的参数值(使用spEL表达式,表达式规则可参考ppt) 等同于keyGenerator,二选一使用

3)cacheManager:指定缓存管理器

4)cacheResolver:指定获取解析器(与管理器二选一)

5)condition:指定符合条件下才缓存

6)unless:当unless指定的条件为true,方法的返回值就不会被缓存


5.缓存的原理

1)看CacheAutoConfiguration
在这里插入图片描述
2)运行步骤:
在这里插入图片描述


6.自定义keyGenerator

在这里插入图片描述


7.@CacheAble 和@CachePut

@CacheAble:先查缓存,再执行标记的方法

@CachePut:先执行方法,然后将值存入缓存


8.@CachePut使用注意

在这里插入图片描述

9.@CacheEvict:缓存清除
在这里插入图片描述
1)allEntries属性:是否全部删除,true是全部删除,不管指不指定key;

2)beforeInvocation:如果执行代码出错,可照样执行,如代码所示,默认是false


10.@Caching

是@Cacheable、@CachePut、@CacheEvict的组合注解,复杂场景下可使用组合条件

例:在这里插入图片描述里面是数组形式

二、redis整合

1.引入依赖

在这里插入图片描述

<dependency>    
    <groupId>org.springframework.boot</groupId>    
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

redis默认访问端口 6379

2.application.properties设置

(redis地址等)

spring.redis.host=192.168.1.113

3.test类测试,引入了redis的starter后,会给容器增加两个组件如下:

在这里插入图片描述
(涉及两个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);
}

4.自定义入库redis操作模板

(这边的例子为将部门序列化入库)

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;    
     }}

5.自定义CacheManager(springboot1.0和2.0版本有所差异)

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组件    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值