开启基于注解的缓存模式
被@Cachable注解修饰的方法所在的类需要使用@EnableCaching
使用Cachable注解
1.value:指定一个或多个Cache名,同cacheNames:
@Cacheable(cacheNames={"emp"})
@Cacheable(cacheNames={"emp","empC"})
2.key:存储对象的key
a) 使用自定义的策略,#参数名 或 #参数.属性名 的方式生成key
属性名称 | 描述 | 示例 |
---|---|---|
method | 当前方法 | #root.method.name |
methodName | 当前方法名 | #root.methodName |
target | 当前被调用的对象 | #root.target |
targetClass | 当前被调用对象的Class | #root.targetClass |
args | 当前方法参数组成的数组 | #root.args[0] |
caches | 当前被调用方法使用的Cache | #root.caches[0].name |
result | 方法执行后的返回值(仅当方法执行后的判断有效,如unless) | #result |
argumentName | 方法的参数名字,可直接用#参数名表示,也可使用#p0或#a0形式,0代表参数的索引。 | #id,#p0,#a0 |
b)若不使用key的动态指定方式,则可以指定KeyGenerator,该生成器需要实现KeyGenerator接口。
@Cachable(chacheNames={"emp"},keyGenerator="myKeyGenerator")
3.condition
满足条件时,才会进行缓存
4.unless
满足条件时,不会进行缓存,优先级比condition高,可以一同使用
@Cachable(chacheNams={"emp"},condition="#id",unless="#result==null")
5.sync
是否使用异步模式,异步模式不支持unless语句
。
6.测试
查询1、2号员工后,再次查询这个两个员工,不会再从数据库查询。