缓存
一、常用的注解
@EnableCaching
开启基于注解的缓存,在使用注解开发时,必须使用该注解后,才可以使用缓存
@Cacheable
申明该方法是可缓存的,一旦第一次执行过方法后,以后再查同样的数据可以从缓存中取
运行顺序:
1.先查缓存
2.再执行方法
@CachePut
在操作数据库时,凡是需要更新数据库的方法可以标注此注解,这时数据库更新后,缓存也会更新。该注解与@Cacheable的另一个不同之处在于,该注解可以保证方法被调用,而@Cacheable如果已经缓存过,就不会再执行方法了。
运行顺序:
1.先执行方法
2.在更新缓存
@CacheEvict
使用该方法时,会清除指定缓存中指定key的内容,
若此时加上属性 allEnteries=true,则改缓存全部删除
二、注解中常用的属性和方法
CacheManager管理多个Cache组件,对缓存真正crud操作在cache组件中,每一个缓存都有自己唯一一个名字
属性及使用如下:
cacheNames/value :
指定缓存的名字,缓存使用CacheManager管理多个缓存组件Cache,这些Cache组件就是根据这个名字进行区分的。通过cacheNames或者value属性指定,相当于是将缓存的键值对进行分组,缓存的名字是一个数组,也就是说可以将一个缓存键值对分到多个组里面
key
缓存数据时的key的值,默认是使用方法参数的值,可以使用SpEL表达式计算key的值
keyGenerator
缓存的生成策略,和key二选一,都是生成键keyGenerator可自定义
cacheManager
指定缓存管理器(如ConcurrentHashMap、Redis等)
cacheResolver 和cacheManager功能一样,和cacheManager二选一
condition
指定缓存的条件(满足什么条件时才缓存),可用SpEL表达式(如#id>0,表示当入参id大于0时才缓存)
unless 否定缓存,即满足unless指定的条件时,方法的结果不进行缓存,使用unless时可以在调用的方法获取到结果之后再进行判断(如#result==null,表示如果结果为null时不缓存)
sync
是否使用异步模式进行缓存
补充
SpEl表达式写法