在 @Cacheable 注解的使用中,共有 9 个属性供我们来使用,这 9 个属性分别是: value、 cacheNames、 key、 keyGenerator、 cacheManager、 cacheResolver、 condition、 unless、 sync。接下来我们就分别来介绍一下它的使用。
1.value/cacheNames 属性
如下图所示,这两个属性代表的意义相同,根据===@AliasFor==注解就能看出来了。这两个属性都是用来指定缓存组件的名称,即将方法的返回结果放在哪个缓存中,属性定义为数组,可以指定多个缓存;
//这两种配置等价
@Cacheable(value = "user") //@Cacheable(cacheNames = "user")
User getUser(Integer id);
2.key属性
可以通过 key 属性来指定缓存数据所使用的的 key,默认使用的是方法调用传过来的参数作为 key。最终缓存中存储的内容格式为:Entry<key,value> 形式。
-
如果请求没有参数:keynew =SimpleKey();
-
如果请求有一个参数:key=参数的值
-
如果请求有多个参数:key=newSimpleKey(params); (你只要知道 key不会为空就行了)
key值的编写,可以使用 SpEL 表达式的方式来编写;除此之外,我们同样可以使用 keyGenerator 生成器的方式来指定 key,我们只需要编写一个 keyGenerator ,将该生成器注册到 IOC 容器即可。(keyGenerator的使用,继续往下看)