一、前言
Spring Cache 对 Cahce 进行了抽象,提供了 @Cacheable、@CachePut、@CacheEvict 等注解。Spring Boot 应用基于 Spring Cache,既提供了基于内存实现的缓存管理器,可以用于单体应用系统,也集成了 Redis 等缓存服务器,可以用于大型系统或者分布式系统。
二、关于 Cache
应用系统需要通过 Cache 来缓存不经常改变的数据以提高系统性能和增加系统吞吐量,避免直接访问数据库等低速的存储系统。缓存的数据通常存放在访问速度更快的内存中或者是低延迟存取的存储器、服务器上。缓存系统存储大都是不经常改变的业务数据,如用户权限、字典数据、配置信息等等。
1、@Cacheable注解
@Cacheable注解的作用是Spring在调用该方法之前,首先在缓存中查找方法的返回值,默认的key是根据参数值生成,如果存在,直接返回缓存中的值,否则执行该方法,并将返回值保存到缓存中
@Cacheable运行流程:
1.方法运行之前,先去查询Cache(缓存组件),按照cacheNames指定的名字获取;
(CacheManager先获取相应的缓存),第一次获取缓存如果没有Cache组件会自动创建。
2.去Cache中查找缓存的内容,使用一个key,默认就是方法的参数值;
- key是按照某种策略生成的;默认是使用keyGenerator生成的,
- Spring默认加载的是SimpleCacheManage,SimpleKeyGenerator生成key的默认策略是:
- 如果没有参数;key=new SimpleKey()
- 如果有一个参数:key=参数的值
- 如果有多个参数:key=new SimpleKey(params)
3.没有查到缓存就调用目标方法;
4.将目标方法返回的结果,放进缓存中
@Cacheable属性说明:
1.acheNames/value:该属性值必须提供,指定缓存组件的名字,将方法的返回结果放在哪个缓存中,是数组的 方式,可以指定多个缓存;
如:cacheNames = "product"或者cacheNames = {“product1”,“product2”}
2.key:缓存数据使用的key,不指定key则默认是使用方法参数的值该属性值支持SpEL表达式
3.cacheManager:指定缓存管理器;或者cacheResolver指定获取解析器
4.condition:指定符合条件的情况下才缓存 condition = “#a0=1” 当方法中第一个参数=1的时候才进行缓存
5.unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存;可以获取到结果进行判断
unless = “#result == null”
unless = “#a0==2”:如果第一个参数的值是2,结果不缓存;
6.sync:是否使用异步模式
使用样例:
2、自定义Key生成器
除了通过SPEL表达式之外,还可以通过自定义key生成器的方式,Spring缓存模块提供了org.springframework.cache.interceptor.KeyGenerator接口用于缓存key的生成声明,因此我们可以自定义一个MyKeyGenerator类并实现了KeyGenerator接口 ,使用如下:
该方法测试用,关于缓存key的生成方式,网上有很多种策略。
使用时只需要修改注解的key属性即可:
3、 @CachePut
@CachePut注解的作用简单的说一句话:既调用方法,又缓存数据。
4、@CacheEvict注解
该注解的作用根据指定的key或者是allEntries属性值移除缓存中特性的键值对。
案例:
5、@Caching注解
该注解是一个分组注解,作用是可以同时应用多个其他注解,该注解提供了3个属性cacheable,put,evict分别用于组合@Cacheable、@CachePut、@CacheEvict三个注解
步骤:
1、环境搭建:
2、导入pom依赖
3、项目结构
4、pojo层UserInfo类
5、yaml配置文件:
6、mapper层:
7、service和serviceImpl
8、Controller层
9、主启动类:
@Cacheable 测试
第一次测试查询:
第二次执行查询方法
@CachePut 测试
执行更新用户方法
执行完更新用户方法之后 再次执行 查询方法 看控制台会不会有输出
@CachePut 测试
进行第二次测试 再次执行查询方法 发现控制台没有输出
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/68807.html