admin管理员组文章数量:1641964
目录
- 一、Spring Cache的核心思想
- 二、@Cacheable
- 三、@CachePut
- 四、@CacheEvict
- 五、@Caching
一、Spring Cache的核心思想
在调用一个缓存方法时,会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。
二、@Cacheable
- 可以标记在一个方法上,也可以标记在一个类上
- 以键值对进行缓存,键支持默认策略和自定义策略,值是方法的返回结果
- 一个支持缓存的方法在对象内部被调用时不会触发缓存功能
- 每次执行前会检查Cache中是否存在相同key的缓存元素,存在就直接从缓存中取,不存在才执行
- 可以指定value、key和condition三个属性
1)value属性:指定Cache名称,必填。表示当前方法的返回值是会被缓存在哪个Cache。支持指定多个Cache(@Cacheable({“cache1”, “cache2”}))
2)key属性:指定Spring缓存方法的返回结果时对应的key,非必填,默认是默认策略生成key。自定义策略是指通过Spring的EL表达式来指定key,可以直接使用“#参数名”或者“#p参数index”,如key="#id"、 key="#p0"、key="#user.id"、key="#p0.id"。且Spring还提供了一个root对象来生成key,使用时可以省略"#root"。
3) condition属性:指定发生的条件,默认为空,表示缓存所有调用情形;也可以通过SpringEL表达式指定,为true时缓存,为false时跳过,即每次调用方法时均会判断。如condition="#user.id%2==0",表示只有当user的id为偶数时才会进行缓存
三、@CachePut
- 可以标记在一个方法上,也可以标记在一个类上
- 指定属性同@Cacheable
- 不会像@Cacheable一样,执行方法前判断是否已缓存key,而是每次都执行,并将执行结果以键值对的形式存入指定的缓存中
四、@CacheEvict
- 用来标注在需要清除缓存元素的方法或类上的
- 可以指定value、key、condition、allEntries和beforeInvocation五个属性
- value、key、condition属性与@Cacheable类似
- allEntries属性:boolean类型,表示是否需要清除缓存中的所有元素。默认为false,表示不需要。若指定为true,会忽略key属性
- beforeInvocation属性:清除操作默认是在对应方法成功执行之后触发的,即方法未能成功返回时不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,Spring会在调用该方法之前清除缓存中的指定元素。
五、@Caching
- 使用该注解,可以在一个方法或者类上同时指定多个Spring Cache相关的注解
- 可以指定cacheable、put和evict三个属性,分别对应相应的注解,如@Caching(cacheable = @Cacheable(“users”), evict = { @CacheEvict(“cache2”),@CacheEvict(value = “cache3”, allEntries = true) })
本文标签: 注解缓存Springcacheablecaching
版权声明:本文标题:Spring缓存注解(@Cacheable、@CachePut、@CacheEvict、@Caching) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729329588a1196216.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论