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毫秒
本文介绍了SpringBoot的缓存方案,包括如何通过@EnableCaching开启缓存,以及在Service层使用@Cacheable、@CachePut和@CacheEvict进行缓存操作。@Cacheable用于查询操作,基于方法参数生成key;@CachePut在每次调用时更新缓存;@CacheEvict用于从缓存中移除数据。示例展示了缓存提高查询效率的效果,如第二次查询时耗时为0毫秒。

1823

被折叠的 条评论
为什么被折叠?



