首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring cache @Cacheable和@CachePut。如果在@cachePut的方法内部抛出异常,则从Cache获取数据

Spring cache是Spring框架提供的一种缓存机制,可以通过注解的方式实现方法级别的缓存。其中,@Cacheable和@CachePut是两个常用的注解。

@Cacheable注解用于标记方法的返回值可以被缓存,当再次调用该方法时,会先从缓存中获取结果,如果缓存中存在,则直接返回缓存的结果,不再执行方法体内的代码。如果缓存中不存在,则执行方法体内的代码,并将结果存入缓存中。

@CachePut注解用于标记方法的返回值需要被更新到缓存中。无论缓存中是否存在该数据,每次调用该方法都会执行方法体内的代码,并将结果更新到缓存中。

如果在@CachePut的方法内部抛出异常,则从Cache获取数据的行为取决于具体的缓存实现。一般情况下,如果缓存中存在对应的数据,则会返回缓存中的数据;如果缓存中不存在对应的数据,则会抛出异常。

Spring框架提供了多种缓存实现方式,可以根据具体需求选择合适的缓存实现。腾讯云提供了云缓存Redis产品,可以作为Spring cache的缓存实现。云缓存Redis是一种高性能、可扩展的分布式缓存服务,支持多种数据结构和缓存策略,适用于各种场景的缓存需求。

腾讯云云缓存Redis产品介绍链接地址:https://cloud.tencent.com/product/redis

使用@Cacheable和@CachePut注解时,需要在Spring配置文件中配置缓存管理器和缓存的具体实现。具体配置方式可以参考Spring框架的官方文档或相关教程。

总结:

  • @Cacheable注解用于标记方法的返回值可以被缓存,从缓存中获取数据。
  • @CachePut注解用于标记方法的返回值需要被更新到缓存中。
  • 如果在@CachePut的方法内部抛出异常,则从Cache获取数据的行为取决于具体的缓存实现。
  • 腾讯云提供了云缓存Redis产品作为Spring cache的缓存实现。
  • 配置缓存管理器和缓存的具体实现可以参考Spring框架的官方文档或相关教程。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

玩转Spring Cache --- @Cacheable@CachePut@CacheEvict注解原理深度剖析使用【享学Spring

前言 上篇文章介绍了@EnableCaching,用它来开启Spring对缓存注解支持。本篇文章将继续分析Spring Cache,并且讲解是我们最为关心:缓存注解实操方面的原理支持使用。...开发过程中因注解优雅、使用简单使得这种方式广泛被大家所接受使用,本文将按照先原理,再实操步骤,一步步解惑Spring缓存注解原理 缓存注解 关于Spring缓存注解,一共有如下5个: @Cacheable...,目标方法一旦抛出异常了,那缓存就清理不掉了~~~~ boolean beforeInvocation() default false; } @Caching:用于处理复杂缓存情况。...所以还没有看这块,此处再一次推荐:【小家Spring】玩转Spring Cache — @Cacheable/@CachePut/@CacheEvict缓存注解相关基础类打点 CacheInterceptor...它提供接口方法获取目标方法CacheOperation集合。

11.1K41

Spring Cache抽象-缓存注解

SimpleCacheManager基于ConcurrentMap配置 @CachePut 主要针对方法配置,能够根据方法请求参数对其结果进行缓存, @Cacheable 不同是,它每次都会触发真实方法调用...-- Spring缓存基本原理 spring 事务管理类似,spring cache 关键原理就是 spring AOP,通过 spring AOP,其实现了在方法调用前、调用后获取方法入参返回值...在默认情况下,缓存抽象使用方法签名以及参数作为key,并将该键与方法调用结果作为Value,如果在Cache注解上没有指定Key,则Spring会使用KeyGenerator来生成一个key...., @Cacheable 不同是,它每次都会触发真实方法调用 @CachePut @Cacheable效果几乎一样。...,如果方法执行抛出异常,则不会清空缓存 @CachEvict(cacheNames=”artisan”,beforeInvocation=true)”) ---- 示例 @CacheEvict(cacheNames

82220

cacheable更新_详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用

@Cacheable @Cacheable 作用 主要针对方法配置,能够根据方法请求参数对其结果进行缓存 @Cacheable 作用配置方法 参数 解释 example value 缓存名称,...+userName); return getFromDB(userName); } @CachePut @CachePut 作用 主要针对方法配置,能够根据方法请求参数对其结果进行缓存, @Cacheable...不同是,它每次都会触发真实方法调用 @CachePut 作用配置方法 参数 解释 example value 缓存名称,在 spring 配置文件中定义,必须指定至少一个 @CachePut(...@CacheEvict 作用配置方法 参数 解释 example value 缓存名称,在 spring 配置文件中定义,必须指定至少一个 @CacheEvict(value=”my cache”...Spring Cache提供了一些供我们使用SpEL上下文数据,下表直接摘自Spring官方文档: 名称 位置 描述 示例 methodName root对象 当前被调用方法名 root.methodName

3.4K20

springboot使用cache缓存

一:Spring缓存抽象 Spring从3.1开始定义了org.springframework.cache.Cacheorg.springframework.cache.CacheManager接口来统一不同缓存技术...true) 三:SpEL上下文数据 Spring Cache提供了一些供我们使用SpEL上下文数据,下表直接摘自Spring官方文档: 名称 位置 描述 示例 methodName root对象 当前被调用方法名...更新@CachePut @CachePut注解作用 主要针对方法配置,能够根据方法请求参数对其结果进行缓存, @Cacheable 不同是,它每次都会触发真实方法调用 。...简单来说就是用户更新缓存数据。但需要注意是该注解value key 必须与要更新缓存相同,也就是与@Cacheable 相同。...=true) beforeInvocation 是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存 @

82520

Spring系列缓存注解@Cacheable @CacheEvit @CachePut 使用姿势介绍

SpringBoot系列缓存注解@Cacheable @CacheEvit @CachePut使用姿势介绍 Spring在3.1版本,就提供了一条基于注解缓存策略,实际使用起来还是很丝滑,本文将针对几个常用注解进行简单介绍说明...@Cacheable 这个注解用于修饰方法or类,当我们访问它修饰方法时,优先从缓存中获取,若缓存中存在,则直接获取缓存值;缓存不存在时,执行方法,并将结果写入缓存 这个注解,有两个比较核心设置...异常时,缓存会怎样? 上面的几个case,都是正常场景,当方法抛出异常时,这个缓存表现会怎样?...小结 最后管理小结一下Spring提供几个缓存注解 @Cacheable: 缓存存在,则从缓存取;否则执行方法,并将返回结果写入缓存 @CacheEvit: 失效缓存 @CachePut: 更新缓存.../master/spring-boot/125-cache-ano 1.

73910

SpringBoot缓存注解@Cacheable使用姿势介绍

[logo.jpg] SpringBoot系列缓存注解@Cacheable @CacheEvit @CachePut使用姿势介绍 Spring在3.1版本,就提供了一条基于注解缓存策略,实际使用起来还是很丝滑...@Cacheable 这个注解用于修饰方法or类,当我们访问它修饰方法时,优先从缓存中获取,若缓存中存在,则直接获取缓存值;缓存不存在时,执行方法,并将结果写入缓存 这个注解,有两个比较核心设置...异常时,缓存会怎样? 上面的几个case,都是正常场景,当方法抛出异常时,这个缓存表现会怎样?...小结 最后管理小结一下Spring提供几个缓存注解 @Cacheable: 缓存存在,则从缓存取;否则执行方法,并将返回结果写入缓存 @CacheEvit: 失效缓存 @CachePut: 更新缓存.../master/spring-boot/125-cache-ano 1.

5K11

缓存抽象层Spring cache实战操作

4.1 @EnableCaching 该注解是启用Spring cache 开关。必须开启才能使用Spring cache相关功能。 4.2 @Cacheable 可以标记在一个方法或者类上。...对于一个支持缓存方法Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。...两者都可以执行缓存“放入”操作,不同于@Cacheable,@CachePut每次都将执行方法并将返回值K-V放入缓存,如果该K存在则进行更新。其他属性可参考Cacheable。...beforeInvocation 是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存。...有时候我们需要在一个方法上同时使用多个相同注解但是java是不支持一个注解在同一个方法上多次使用。这时就可以使用该注解进行组合。 5. 使用要点 缓存注解所在方法不能在类中进行内部调用。

72310

Spring缓存注解@Cacheable、@CacheEvict、@CachePut

@Cacheable @Cacheable 作用 主要针对方法配置,能够根据方法请求参数对其结果进行缓存 参数 解释 example value 缓存名称,在 spring 配置文件中定义,必须指定至少一个...例如:@Cacheable(value="mycache") @Cacheable(value={"cache1","cache2"} key 缓存 key,可以为空,如果指定要按照 SpEL 表达式编写...@CachePut 作用 主要针对方法配置,能够根据方法返回值对其结果进行缓存, @Cacheable 不同是,它每次都会触发真实方法调用,在其他地方写是根据方法请求参数对其结果进行缓存...value="my cache") key 缓存 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法所有参数进行组合 @CachePut(value="testcache...,缺省情况下,如果方法执行抛出异常,则不会清空缓存 @CachEvict(value="testcache",beforeInvocation=true) @CacheConfig       所有的

2K20

Spring -- Cache原理

简介 Spring Cache并不是一种缓存实现方式,而是缓存使用一种方式,其基于Annotation形式提供缓存存取,过期失效等各种能力,这样设计理由大概是缓存业务逻辑本身是没有关系,不需要耦合到一起...// 实例化一个基于内存缓存管理器, 其内部有users,addresses两个Cache对象。...使用缓存 Spring Cache提供了四个Annotation方便开发人员使用缓存,而不建议直接访问CacheManager自己做定制,具体如下表格所示: 注解 描述 Cacheable 存在则从缓存取...,不存在则执行方法,结果放入到缓存 CacheEvict 将方法操作对象缓存删除 CachePut 无论方法是否存在都会将执行结果放入到缓存中 Caching 以上三种组合 以Cacheable使用为例...,代码中都已经标识好了注释,其中值得关注CacheableCachePut操作区别,Cacheable会优先去缓存里面获取,缓存获取到了,且当前没有对应CachePut操作,则不会再次调用方法

3.1K30

Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用

Spring Cache是作用在方法,其核心思想是这样:当我们在调用一个缓存方法时会把该方法参数返回结果作为一个键值对存放在缓存中,等到下次利用同样参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回...需要注意是当一个支持缓存方法在对象内部被调用时是不会触发缓存功能。@Cacheable可以指定三个属性,value、keycondition。...在支持Spring Cache环境下,对于使用@Cacheable标注方法Spring在每次执行前都会检查Cache中是否存在相同key缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回...@CachePut也可以标注在类上方法上。使用@CachePut时我们可以指定属性跟@Cacheable是一样。...,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。

1.8K10

springboot-cache简单使用

springboot-cache 简单使用 springboot-cache介绍 一、前言 Spring Cache 对 Cahce 进行了抽象,提供了 @Cacheable、@CachePut、@CacheEvict...二、关于 Cache 应用系统需要通过 Cache 来缓存不经常改变数据以提高系统性能增加系统吞吐量,避免直接访问数据库等低速存储系统。...springboot-cache注解讲解 1、@Cacheable注解 @Cacheable注解作用是Spring在调用该方法之前,首先在缓存中查找方法返回值,默认key是根据参数值生成,如果存在...指定名字获取 * 先去获取相应缓存 第一次获取缓存如果没有 Cache组件会自动创建 * 2 去Cache 中查找缓存内容 使用一个key 默认就是方法参数 *...CachePut注解作用简单说一句话:既调用方法,又缓存数据

67120

硬核 | 使用spring cache让我接口性能瞬间提升了100倍

优化前系统流程图: 我们从图中可以看到,分类功能分为生成分类数据 获取分类数据两个流程,生成分类数据流程是有个JOB每隔5分钟执行一次,从mysql中获取分类数据封装成首页需要展示分类数据结构,...优化后系统流程图: 我们看到,其他流程都没有变,只是在获取分类接口中增加了先从spring cache获取分类数据功能,如果获取不到再从redis中获取,再获取不到才从mysql中获取。...@Cacheable、@CachePut、@CacheEvict 这三个注解用户差不多,定义在需要缓存具体类或方法上面。...再看看控制台打印。 有数据打印,说明第一次请求进入了categoryService.getCategory方法内部。 然后再重新请求一次, 还是有数据,返回。...但是控制台没有重新打印新数据,还是以前数据,说明这一次请求走是缓存,没有进入categoryService.getCategory方法内部

33120

硬核 | 使用spring cache让我接口性能瞬间提升了100倍

我们从图中可以看到,分类功能分为生成分类数据 获取分类数据两个流程,生成分类数据流程是有个JOB每隔5分钟执行一次,从mysql中获取分类数据封装成首页需要展示分类数据结构,然后保存到redis中...我们看到,其他流程都没有变,只是在获取分类接口中增加了先从spring cache获取分类数据功能,如果获取不到再从redis中获取,再获取不到才从mysql中获取。...@Cacheable、@CachePut、@CacheEvict 这三个注解用户差不多,定义在需要缓存具体类或方法上面。...可以看到,有数据返回。 再看看控制台打印。 ? 有数据打印,说明第一次请求进入了categoryService.getCategory方法内部。 然后再重新请求一次, ? 还是有数据,返回。...但是控制台没有重新打印新数据,还是以前数据,说明这一次请求走是缓存,没有进入categoryService.getCategory方法内部

2.4K33

springboot高级特性-缓存

缓存:将相应数据存储起来以避免数据重复创建、处理传输,可有效提高性能 springboot中使用缓存 可以缓存方法返回值 等等 避免多次查询数据库 springboot缓存有以下层级关系 CachingProvider...缓存提供者 —>管理控制多个CacheManager---->管理控制多个唯一命名cache----->存储在cachekey-value对-------->Expiry 每一个存储在cache...中条目有一个有效期 Spring缓存抽象 cache 定义各种操作 CacheManager 缓存管理器,管理各种缓存组件 Cache缓存接口 定义缓存操作 如:RedisCache。...@CachePut注解 是方法返回结果后缓存所以我们可以从方法返回值中获取 @CachePut(cacheNames = "emp",key = "#result.id") public Employee...这里需要注意是 如果是在方法执行之后执行 如果方法抛出异常 缓存就不会清空。

36820

SpringMVC+mybatis+maven+Ehcache缓存实现

1、@Cacheable("cache1")、@Cacheable({"cache1", "cache2"})//Cache是发生在cache1cache2上     value属性是必须指定,其表示当前方法返回值是会被缓存在哪个...4、@CachePut("users")     在支持Spring Cache环境下,对于使用@Cacheable标注方法Spring在每次执行前都会检查Cache中是否存在相同key缓存元素...@CachePut也可以标注在类上方法上。使用@CachePut时我们可以指定属性跟@Cacheable是一样。   ...6、@CacheEvict(value="users", beforeInvocation=true)     清除操作默认是在对应方法成功执行之后触发,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作...其拥有三个属性:cacheable、putevict,分别用于指定@Cacheable、@CachePut@CacheEvict。

58550

第一篇:SpringBoot高级-缓存入门

CacheManager定义了创建、配置、获取、管理控制多个唯一命名Cache,这些Cache存在于CacheManager上下文中。...> Spring缓存抽象 Spring从3.1开始定义了org.springframework.cache.Cacheorg.springframework.cache.CacheManager...使用Spring缓存抽象时我们需要关注以下两点; 确定方法需要被缓存以及他们缓存策略 从缓存中读取之前缓存存储数据 重要概念和缓存注解 Cache 缓存接口,定义缓存操作。...缓存数据时key生成策略 serialize 缓存数据时value序列化策略 简要说明: @Cacheable注解加载方法中,那么该方法第一次会查询数据库,然后就会把数据放在缓存中,使用Cache...: @Cacheable: 1、方法运行之前,先去查询Cache(缓存组件),按照cacheNames指定名字获取; (CacheManager先获取相应缓存),第一次获取缓存如果没有Cache组件会自动创建

61240

SpringBoot2.0 基础案例(13):基于Cache注解模式,管理Redis缓存

一、Cache缓存简介 从Spring3开始定义CacheCacheManager接口来统一不同缓存技术; Cache接口为缓存组件规范定义,包含缓存各种操作集合; Cache接口下Spring...,能够根据方法请求参数对其进行缓存 Cacheable 执行流程 1)方法运行之前,按照cacheNames指定名字先去查询Cache 缓存组件 2)第一次获取缓存如果没有Cache组件会自动创建...,放进缓存中 Cacheable 注解属性 cacheNames/value:指定方法返回结果使用缓存组件名字,可以指定多个缓存 key:缓存数据使用key key/keyGenerator:key...beforeInvocation = false:方法之前执行清除缓存,出现异常不执行 beforeInvocation = true:代表清除缓存操作是在方法运行之前执行,无论方法是否出现异常,缓存都清除...与@Cacheable区别在于是否每次都调用方法,常用于更新,写入 CachePut:执行方法且缓存方法执行结果 修改了数据某个数据,同时更新缓存; 执行流程 1)先调用目标方法 2)然后将目标方法结果缓存起来

62320

Spring Boot 缓存Spring Boot缓存

CacheManager中轮询得到相应Cache Spring Cache 使用方法原理都类似于Spring对事务管理支持,都是AOP方式。...其核心思想是:当我们在调用一个缓存方法时会把该方法参数返回结果作为一个键值对存放在缓存中,等到下次利用同样参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。...Spring Cache 提供了@Cacheable、@CachePut、@CacheEvict等注解,在方法上使用。...如下表 注解 描述 @Cacheable 主要针对方法配置,能够根据方法请求参数对其结果进行缓存 @CachePut 主要针对方法配置,能够根据方法请求参数对其结果进行缓存, @Cacheable... beforeInvocation:是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存。

3.3K30

Spring cache 理解

Spring cache Spring 自3.1版本引入了 ==注解缓存==,也就是我们通常说 Spring cache,这里我们要注意下,Spring 缓存与我们通常意义上缓存差别很多,他不是一个具体实现方案...==因为是基于 AOP,所以 在方法内部或者非 public 方法不支持== 废话说完,我们来正文 ---- 先看概念 @Cacheable 针对方法配置,根据方法请求参数对结果缓存,也就是说白了根据...,也就是说白了根据 key 获取结果, @Cacheable 不同是 每次都会触发真实方法调用 参数 描述 示例 value 缓存名称,在 spring 配置文件中定义,必须指定至少一个 例如:...缓存用户名字长度大于 2 大家key发现,@CachePut @Cacheable 用法是相同,只是触发真实方法不同 ---- @CacheEvict 针对方法配置,能对缓存清空,也就是redis...false,如果指定为 true,则在方法还没有执行时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存 例如:@CachEvict(value=”usercache”,beforeInvocation

64020

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券