1.SpringBoot的缓存方案
1.1 开启缓存
SpringBoot的缓存是内存中的缓存,关闭服务器就没有了,无法持久化
@EnableCaching//开启springBoot的缓存,在springBoot的启动类上添加
public class BookMallApp {
public static void main(String[] args) {
SpringApplication.run(BookMallApp.class,args);
}
}
1.2 在service层定义要缓存的数据
@Cacheable(cacheNames = "bookVo")//定义这个方法开启缓存
@CachePut //可以更新缓存,key = "#id" 表示采用参数中的 id 属性作为键。当缓存中该键的值不存在时,则将返回值放入缓存;当缓存中该键的值已存在时,会更新缓存的内容。
@CacheEvict//直接根据key将缓存删除
缓存的应用场景
@Cacheable
常用的属性
cacheNames/value
:用来指定缓存组件的名字key
:缓存数据时使用的 key,可以用它来指定。默认是使用方法参数的值。(这个 key 你可以使用 spEL 表达式来编写)keyGenerator
:key 的生成器。 key 和 keyGenerator 二选一使用cacheManager
:可以用来指定缓存管理器。从哪个缓存管理器里面获取缓存。condition
:可以用来指定符合条件的情况下才缓存unless
:否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。当然你也可以获取到结果进行判断。(通过#result
获取方法结果)sync
:是否使用异步模式。
@Cacheable
常用于查询操作的方法
@CachePut
:配置于函数上,能够根据参数定义条件来进行缓存,它与@Cacheable不同的是,它每次都会真实调用函数,所以主要用于数据新增和修改操作上。
@CacheEvict
:配置于函数上,通常用在删除方法上,用来从缓存中移除相应数据。除了同@Cacheable一样的参数之外,它还有下面两个参数:
allEntries:非必需,默认为false。当为true时,会移除所有数据
beforeInvocation:非必需,默认为false,会在调用方法之后移除数据。当为true时,会在调用方法之前移除数据。
第一次查询
2023-06-09 16:38:53.234 DEBUG 16256 --- [nio-8086-exec-1] com.wn.bm.controller.BookController : 查询耗时>>>>>877毫秒
第二次查询
2023-06-09 16:40:32.400 DEBUG 16256 --- [nio-8086-exec-4] com.wn.bm.controller.BookController : 查询耗时>>>>>0毫秒