在SpringBoot中,当我们需要使用缓存时:
第一步:在pom.xml文件中导入缓存依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
第二步:在SpringBoot启动类中标注 @EnableCaching开启缓存
@SpringBootApplication
@MapperScan(basePackages = {"com.lzj.cache.mapper"}) //扫描mapper接口
@EnableCaching //开启缓存
public class SpringbootCacheApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootCacheApplication.class, args);
}
}
第三步:在需要使用缓存的方法上面添加如下注解:
@Cacheable 将方法的运行结果进行缓存;第二次再要相同的数据,直接从缓存中获取,不再调用方法;
@CacheEvict 移除缓存
@CachePut 修改了数据库的某个数据,同时更新缓存
下面对这三个注解进行解释:
@Cacheable:
Cacheable中的几个属性:
1、cacheNames/value:指定缓存组件的名字, 数组的方式,可以指定多个缓存组件名称。
2、key: 缓存数据使用的key,默认使用方法参数的值作为key。也可以自己指定,通过编写
SpEL指定key的值;如:#root.methodName 、#id等
3、keyGenerator: key的生成器,可以自己编写key的生成器组件。
注意:在使用时key和keyGenerator二选一。
4、cacheManager: 指定缓存管理器。
5、condition: 指定符合条件的情况下才缓存;如: condition = "#id>0" "#a0>1"才进行缓存
6、unless: 否定缓存; 当unless指定的条件为true,方法的返回值就不会缓存;
如:可以获取到结果进行判断unless = "#result == null " 当方法结果为null时,不缓存。
7、sync: 是否使用异步模式
@CacheEvit:
@CacheEvit:缓存清除
@CacheEvit和@Cacheable的相同属性就不再赘述。
1、allEntries = true 每次删除,将指定缓存中的所有数据全都删除
2、beforeInvocation=false ,缓存的清除是否是在方法之前执行,默认false, 即在方法之后清除,当方法执
行出现异常时,缓存不会清除。
beforeInvocation=true ,方法之前清除,无论方法执行是否出现异常,缓存都会清除。
@CachePut:
运行时机:先调用目标方法,将目标方法的结果缓存起来
属性与@Cacheable相同
此外还有@CacheConfig:可以标注在类上,抽取出相同的属性,简化代码。
@Target({Elemen