Spring缓存注解@Cacheable、@CachePut和@CacheEvict
来源:互联网 发布:淘宝开店去哪里推广 编辑:程序博客网 时间:2024/04/28 12:21
1、@Cacheable:主要用来配置方法,能够根据方法的请求参数对其结果进行缓存。即当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本身被略过了,取而代之的是方法的结果直接从缓存中找到并返回了。
参数介绍:
value:缓存的名字,必须指定至少一个。
key:缓存的key,可以为空,如果指定要按照SpEL表达式编写;如果不指定,则缺省按照方法的所有参数进行组合。
condition:缓存的条件,可以为空,使用SpEL编写,返回true或者false,只有为true才能缓存。
例子:
- 1
- 2
- 1
- 2
这两行代码的意思是指,缓存的名字为:shops:detail,其中缓存的key值为id:id的值。其中#p0的意思是指加有@Cacheable注解的方法中的第一个参数
2、@CacheEvict:主要对方法配置,用来标记要清空缓存的方法,当这个方法被调用并满足一定条件后,即会清空缓存。
参数解析:
- value:缓存的位置,不能为空。
- key:缓存的key,默认为空。
- condition:触发的条件,只有满足条件的情况才会清楚缓存,默认为空,支持SpEL。
- allEntries:true表示清除value中的全部缓存,默认为false。
beforeInvocation:是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存
例子:
- 1
- 2
- 1
- 2
上面两行代码表示,只要param中key为id的值大于0,将进行缓存操作,否则直接调用调用getById方法返回结果。
- 1
- 2
- 1
- 2
上面两行代码表示,只要执行了delete方法,就刷新缓存名为”shops:brief”下面的所有缓存。
3、@CachePut:主要针对方法的配置,能够根据方法的请求参数对其结果进行缓存,和@Cacheable不同的是,它每次都会触发真实方法的调用。
- value:缓存的位置,不能为空。
- key:缓存的key,默认为空。
- condition:触发的条件,只有满足条件的情况才会清楚缓存,默认为空,支持SpEL。
- 1
- 2
- 1
- 2
上面两行代码表示,当调用update方法时,该方法体会被执行,并且执行的结果会返回写入到缓存中。
key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,Spring将使用默认策略生成key。我们这里先来看看自定义策略,至于默认策略会在后文单独介绍。
自定义策略是指我们可以通过Spring的EL表达式来指定我们的key。这里的EL表达式可以使用方法参数及它们对应的属性。使用方法参数时我们可以直接使用“#参数名”或者“#p参数index”。下面是几个使用参数作为key的示例。
@Cacheable(value="users", key="#id")
public User find(Integer id) {
returnnull;
}
@Cacheable(value="users", key="#p0")
public User find(Integer id) {
returnnull;
}
@Cacheable(value="users", key="#user.id")
public User find(User user) {
returnnull;
}
@Cacheable(value="users", key="#p0.id")
public User find(User user) {
returnnull;
}
Spring还为我们提供了一个root对象可以用来生成key。通过该root对象我们可以获取到以下信息。
属性名称
描述
示例
methodName
当前方法名
#root.methodName
method
当前方法
#root.method.name
target
当前被调用的对象
#root.target
targetClass
当前被调用的对象的class
#root.targetClass
args
当前方法参数组成的数组
#root.args[0]
caches
当前被调用的方法使用的Cache
#root.caches[0].name
- Spring缓存注解@Cacheable、@CachePut和@CacheEvict
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用
- Spring 缓存注解(@Cacheable、@CachePut、@CacheEvict)使用
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- Spring缓存注解@Cacheable,@CachePut , @CacheEvict介绍
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用注意点
- Spring注解@Cacheable、@CachePut、@CacheEvict的使用
- spring整合redis缓存,以注解(@Cacheable、@CachePut、@CacheEvict)形式使用
- spring整合redis缓存,以注解(@Cacheable、@CachePut、@CacheEvict)形式使用
- spring整合redis缓存,以注解(@Cacheable、@CachePut、@CacheEvict)形式使用
- spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict
- spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict
- @Cacheable、@CachePut和@CacheEvict介绍
- Java中线程同步的两种方式
- Ubuntu如何开启SSH SERVER服务
- 自定义闹钟,通知
- Go语言 IDE之Gogland配置使用
- MySQL Mariadb clear logs
- Spring缓存注解@Cacheable、@CachePut和@CacheEvict
- UltraEdit和Notepad++编辑器选中单列的方法
- java前台向后台传对象
- HttpSession
- 设计六大原则
- HTTPS上线过程案例说明
- JavaScript 就要统治世界了?
- Android开发的RecyclerView+CardView+自动适配Auto的使用全解
- myeclipse部署tomcat问题