前言
前面说到JSR-107缓存规则,不过很少有人用,那么大家都可能用什么呢?其实雷士的缓存技术还是很多的,不过重点就说一个springboot的缓存技术,他们的概念都是一样的,但是springboot已经给大家写好了过程,我们就不需要在自己去具体实现了
几个重要的注解和概念
名称 | 解释 |
---|---|
Cache | 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等 |
CacheManager | 缓存管理器,管理各种缓存(Cache)组件 |
@Cacheable | 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 |
@CacheEvict | 清空缓存 |
@CachePut | 保证方法被调用,又希望结果被缓存(缓存更新) |
@EnableCaching | 开启基于注解的缓存 |
keyGenerator | 缓存数据时key生成策略 |
serialize | 序列化 |
核心
准备:
一、首先需要添加依赖:
- 1.直接在springboot 快速构建时选择cache模块(直接搜索就行)
- 2.直接在pom文件中添加依赖:
spring-boot-starter-cache
二、在启动类上添加;@enableCaching 注解开启缓存
使用
@Cacheable注解的属性:
属性 | 解释 |
---|---|
cacheNames/value | 指定缓存的名字,缓存使用CacheManager管理多个缓存组件Cache,这些Cache组件就是根据这个名字进行区分的。对缓存的真正CRUD操作在Cache中定义,每个缓存组件Cache都有自己唯一的名字,通过cacheNames或者value属性指定,相当于是将缓存的键值对进行分组,缓存的名字是一个数组,也就是说可以将一个缓存键值对分到多个组里面 |
key | 缓存数据时的key的值,默认是使用方法参数的值,可以使用SpEL表达式计算key的值 |
keyGenerate | 缓存的生成策略,和key二选一,都是生成键的,keyGenerator可自定义 |
cacheManager | 指定缓存管理器(如ConcurrentHashMap、Redis等) |
cacheResolver | 和cacheManager功能一样,和cacheManager二选一 |
condition | 指定缓存的条件(满足什么条件时才缓存),可用SpEL表达式(如#id>0,表示当入参id大于0时才缓存) |
unless | 否定缓存,即满足unless指定的条件时,方法的结果不进行缓存,使用unless时可以在调用的方法获取到结果之后再进行判断(如#result==null,表示如果结果为null时不缓存) |
sync | 是否使用异步模式进行缓存 |
@CachePut
@Cache
@Caching
额外知识
这里有使用到mybatis技术就顺手写一下,mybatis也拥有自己的缓存技术,它也是拥有注解版的,特别提一下,
它的缓存技术分为两级
第一级:局部缓存(sqlsession级别)
- 局部缓存是默认开启的
- 疑问:既然他是默认开启的,为什么在此次整合中没有看到没有mybatis的效果
- 解答:mybatis的第一级缓存,需要在开启事务的情况下才能开到缓存效果, 而在springboot中是默认不开启事务的
第二级:全局缓存(mapper级别)
- 全局缓存需要手动开启
- 方法一:在类上添加@CacheNamespace注解
- 方法二:在mapper.xml文件中添加< /cache>
版权声明:本文为weixin_43157543原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。