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

Spring Cache -当从同一类的另一个方法调用时,@CacheEvict,@CachePut不工作

Spring Cache是Spring框架提供的一种缓存机制,它通过将数据缓存在内存中,以提高应用程序的性能和响应速度。当从同一类的另一个方法调用时,@CacheEvict和@CachePut注解可能会出现不工作的情况。下面是对该问题的完善且全面的答案:

Spring Cache概念: Spring Cache是Spring框架中提供的一种缓存机制,它通过将方法的返回值缓存到内存中,以提高应用程序的性能和响应速度。当相同的方法再次被调用时,Spring Cache会先检查缓存中是否存在该方法的返回值,如果存在,则直接从缓存中获取结果,而不需要执行实际的方法逻辑。这样可以节省时间和资源。

分类: Spring Cache可以根据缓存的存储方式和范围进行分类。常见的分类包括:本地缓存、分布式缓存和远程缓存。本地缓存是将缓存存储在应用程序的内存中;分布式缓存是将缓存存储在多个节点上,以实现高可用和容错性;远程缓存是将缓存存储在远程服务器上,可以用于多个应用程序之间共享缓存。

优势: 使用Spring Cache机制可以带来以下优势:

  1. 提高应用程序的性能和响应速度:通过缓存方法的返回值,减少实际方法的执行次数,从而提高应用程序的性能和响应速度。
  2. 减少对底层资源的访问:通过缓存方法的返回值,减少对底层资源(如数据库)的访问,从而降低对底层资源的压力。
  3. 简化开发过程:Spring Cache提供了简单易用的注解,可以方便地对方法进行缓存配置,从而简化了开发过程。

应用场景: Spring Cache可以应用于各种场景,特别是在以下情况下使用较为常见:

  1. 查询操作频繁、数据变化较少的场景:通过缓存查询结果,可以减少对数据库等底层资源的访问,提高查询性能。
  2. 计算代价较大的方法:例如复杂的数学计算、网络请求等,通过缓存计算结果,可以减少计算的次数,提高方法的执行效率。
  3. 并发访问较高的场景:通过缓存结果,可以减少对共享资源的访问,提高并发访问的效率。

腾讯云相关产品: 腾讯云提供了多个与缓存相关的产品,可以配合Spring Cache使用,包括:

  1. 云缓存Redis:腾讯云提供的高性能、可扩展的分布式缓存服务,支持将数据存储在内存中,提供快速的读写访问。详细介绍请参考云缓存Redis
  2. 云数据库Redis版:腾讯云提供的基于Redis的高性能、可扩展的NoSQL数据库服务,可以作为Spring Cache的后端存储。详细介绍请参考云数据库Redis版

以上是对Spring Cache的完善且全面的答案,希望能满足您的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

3.1开始,Spring引入了对Cache支持。其使用方法和原理都类似于Spring对事务管理支持。...标记在一个方法上时表示该方法是支持缓存标记在一个上时则表示该类所有的方法都是支持缓存。...@CachePut也可以标注在上和方法上。使用@CachePut时我们可以指定属性跟@Cacheable是一样。...标记在一个上时表示其中所有的方法执行都会触发缓存清除操作。@CacheEvict可以指定属性有value、key、condition、allEntries和beforeInvocation。...mode为proxy时,只有缓存方法在外部被调用时候Spring Cache才会发生作用,这也就意味着如果一个缓存方法在其声明对象内部被调用时Spring Cache是不会发生作用

2K10

Spring Cache抽象-缓存注解

是一个组注解 @CacheConfig 级别的全局缓存注解 完整示例 概述 Spring Cache提供了5种可以在方法级别或者级别上使用缓存注解。...客户端“Calling code”调用一个普通 Plain Object foo() 方法时候,是直接作用在 pojo 自身对象上,客户端拥有的是被调用者直接引用 动态代理调用图: ?...Spring cache 利用了 Spring AOP 动态代理技术,即客户端尝试调用 pojo foo()方法时候,给他不是 pojo 自身引用,而是一个动态生成代理,这个时候,实际客户端拥有的是一个代理引用...当我们想要指定相同类型多个注释(例如同一方法@CacheEvict或@CachePut)时,@Caching注释很方便。 假设我们有两个包含相同产品缓存,使用相同key。...前面的4个注解都是基于方法,如果在同一中需要缓存方法注解属性都类似,则需要一个个重复增加,Spring4增加了@CacheConfig级别的注解解决这个问题。

86220
  • Spring Cache简明教程

    引言   在我上一篇文章如何正确使用缓存来提升系统性能中,我偏理论视角介绍了Cache在性能优化中必要性,在这篇文章中我们介绍Spring全家桶中和cache相关Spring-Cache。...如何工作   Spring Cache背后工作原理基于Spring AOP(面向切面编程),它会在运行时动态地创建代理对象,来拦截对被注解方法调用。...根据注解不同,Spring Cache可以执行如下操作: @Cacheable:在方法执行前先检查缓存,如果缓存中已经存在相应数据,则直接返回缓存数据而执行方法。...数据被更新或删除时,你需要使用@CachePut和@CacheEvict注解来确保缓存与数据源保持同步。 缓存并发问题   虽然缓存操作通常是原子性,但在高并发环境下仍然可能遇到并发问题。...对私有方法、final方法、static方法使用缓存注解是无效,因为SpringAOP无法拦截这些方法调用。

    10910

    springboot高级特性-缓存

    条目有一个有效期 Spring缓存抽象 cache 定义各种操作 CacheManager 缓存管理器,管理各种缓存组件 Cache缓存接口 定义缓存操作 如:RedisCache。...EhCacheCaceh等 缓存注解 @Cacheable 主要针对方法配置,能够根据方法请求参数对其结果进行缓存 @CacheEvict 清空缓存 @CachePut 保证方法被调用,又希望结果被缓存...unless = “#result == null” 结果为空时就不进行缓存 sync: 是否使用异步模式 注意开启异步 unless就会失效 @CachePut 注解 加入mapper方法...@CachePut注解 是方法返回结果后缓存所以我们可以方法返回值中获取 @CachePut(cacheNames = "emp",key = "#result.id") public Employee...@CacheEvict注解 @CacheEvict : 缓存清除 通过可以指定要清除数据 写默认是参数为key key = "#id"取出id为key缓存 参数:allEntries

    37720

    Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存工作原理、缓存注解使用方法与最佳实践

    每个缓存实例都有一个唯一名称,用于标识不同缓存区域。 工作流程: 在方法执行前,Spring Cache会检查是否存在缓存数据。...Spring Cache核心组件和工作流程: Spring Cache核心组件包括缓存管理器(CacheManager)和缓存存储(Cache)。...Spring Cache工作流程如下: 在方法执行前,检查是否存在缓存数据。 如果缓存中存在数据,直接返回缓存结果。 如果缓存中不存在数据,执行方法体并将结果存入缓存。...同时,通过unless属性设置了一个条件,方法返回值为null时,缓存该结果。 createOrder方法通过@CachePut注解标记为需要更新缓存方法。...在这里,我们使用了unless属性来设置一个条件,即方法返回值为null时,缓存该结果。

    54410

    Spring Cache 简介

    Spring本身提供Cache注解有下面几个: @Cacheable: 该注解表示所注解方法支持缓存。...所注解方法被调用时Spring首先会根据参数从缓存中查找,如果没有则执行相应方法,否则返回缓存值; @CacheEvict: 该注解表示所注解方法执行后将清空相应缓存; @CachePut:...比如,对于update(User user)这种类型方法; @Caching: 当我们需要在一个方法上添加多个缓存注解(如:@CacheEvict和@CachePut),或者需要操作多个缓存时,可以使用该注解进行组合...另外,Spring框架4.1版本后也支持JCache(JSR-107)标准注解: @CacheResult: 类似Spring所提供@Cacheable; @CachePut: 类似Spring所提供...@CachePut; @CacheRemove: 类似Spring所提供@CacheEvict,不过只支持将方法返回结果从缓存中清除,如果要清空全部缓存需要使用下面的注解; @CacheRemoveAll

    59520

    Spring boot缓存使用

    就像我们可以方法请求中指定缓存键,如果没有指定,spring使用所有字段并将其用作缓存键(主要是HashCode)来维护缓存,但我们可以通过提供关键信息来覆盖此行为: @Cacheable(value...有时我们需要手动操作缓存,这样可在方法调用之前put(更新)缓存,这个方法让我们更新缓存,并且执行被注释方法Spring执行注释方法,并将其结果放入缓存中(根据@CachePut选项)。...它与@Cacheable支持相同选项,应该用于缓存填充,而不是方法流优化。 请注意,通常鼓励对同一方法使用@CachePut和@Cacheable注释,因为它们具有不同行为。...@CacheEvict 当我们需要从缓存删除先前加载主数据时可以使用它,CacheEvict注释方法将被执行时,它将清除缓存。...@Caching 同时需要CachePutCacheEvict时,使用这个注释。 Spring启动提供与以下缓存提供程序集成。

    94710

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

    优化后系统流程图: 我们看到,其他流程都没有变,只是在获取分类接口中增加了先从spring cache中获取分类数据功能,如果获取不到再从redis中获取,再获取不到才mysql中获取。...@Cacheable、@CachePut、@CacheEvict 这三个注解用户差不多,定义在需要缓存具体方法上面。...说明缓存生效了,下面我介绍一下spring cache工作原理 三、工作原理 通过上面的例子,相当朋友们对spring cache在项目中用法有了一定认识。那么它工作原理是什么呢?...AutoProxyRegistrar和ProxyCachingConfiguration两个 AutoProxyRegistrar是让spring cache拥有AOP能力(至于如何拥有AOP能力...另外定义了CacheOperationSource,该类封装了cache方法签名注解解析工作,形成CacheOperation集合。

    33720

    Spring cache原理详解

    一、概述 Spring3.1版本开始,Spring框架就支持显式地将缓存添加到现有的Spring应用程序中。与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码侵入最小。...本篇分析是基于springboot2.1.3版本。 缓存使用原理大致如下图: ? 二、使用方式 Spring cache提供了开箱即用接入方式,只需要若干注解和缓存管理即可接入。...该方法前半段是从缓存中获取目标是否被代理过,如果被代理过直接把增强逻辑织入,避免重复创建代理,后半段就是生成代理逻辑,创建代理过程我们之前分析过,此处不再分析,重点分析一下候选增强器中获取增强逻辑方法...,其实就是检查目标方法上是否有缓存相关注解(@Cacheable,@CachePut,@CacheEvict等),如果有说明增强器对目标代理适用,然后找到合适增强器列表在APC中调用createProxy...,一共10种,基本覆盖了所有流行缓存类型,主要mappings也放入了NoOpCacheConfiguration无缓存配置,启用缓存时使用该配置,可以理解为一种特殊缓存。

    68030

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

    我们看到,其他流程都没有变,只是在获取分类接口中增加了先从spring cache中获取分类数据功能,如果获取不到再从redis中获取,再获取不到才mysql中获取。...@Cacheable、@CachePut、@CacheEvict 这三个注解用户差不多,定义在需要缓存具体方法上面。...说明缓存生效了,下面我介绍一下spring cache工作原理 三、工作原理 通过上面的例子,相当朋友们对spring cache在项目中用法有了一定认识。那么它工作原理是什么呢?...AutoProxyRegistrar和ProxyCachingConfiguration两个 AutoProxyRegistrar是让spring cache拥有AOP能力(至于如何拥有AOP能力...另外定义了CacheOperationSource,该类封装了cache方法签名注解解析工作,形成CacheOperation集合。

    2.5K33

    张三进阶之路 | 基于Spring Cache实现缓存技术

    图片前情提要张三在面对公司现有缓存技术使用混乱、效果不佳问题时,选择主动出击,基于Spring框架自研一套缓存解决方案,这体现了他专业技术能力、问题解决意识以及积极工作态度。...在Spring Cache抽象中,有三个常用注解:@Cacheable、@CachePut和@CacheEvict。...方法被调用时Spring会首先检查缓存中是否存在相应键值对。如果存在,则直接从缓存中返回结果;如果不存在,则执行方法并将结果存入缓存。...✈️ @CachePut @CachePut注解用于声明一个方法结果应该被放入缓存中。每次调用该方法时,都会执行方法并将结果存入缓存,无论缓存中是否已存在该键值对。...✈️ @CacheEvict @CacheEvict注解用于声明一个方法会导致缓存中某个键值对被删除。

    49620

    Spring整合Ehcache管理缓存

    前言 Ehcache 是一个成熟缓存框架,你可以直接使用它来管理你缓存。 Spring 提供了对缓存功能抽象:即允许绑定不同缓存解决方案(如Ehcache),但本身直接提供缓存功能实现。...xml方式 EhcacheCacheManager构造函数或工厂方法被调用时,会默认加载classpath下名为ehcache.xml配置文件。...@CachePut 与@Cacheable不同,@CachePut不仅会缓存方法结果,还会执行方法代码段。 它支持属性和用法都与@Cacheable一致。...下面是@Cacheable、@CacheEvict和@CachePut基本使用方法一个集中展示: @Service public class UserService { // @Cacheable...(@Cacheable、@CacheEvict或@CachePut)多次修饰一个方法,就需要用到@Caching。

    1.8K70

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

    不同是,它每次都会触发真实方法调用 @CachePut 作用和配置方法 参数 解释 example value 缓存名称,在 spring 配置文件中定义,必须指定至少一个 @CachePut(...value=”my cache”) key 缓存 key,可以为空,如果指定要按照 SpEL 表达式编写,如果指定,则缺省按照方法所有参数进行组合 @CachePut(value=”testcache...@CacheEvict 作用和配置方法 参数 解释 example value 缓存名称,在 spring 配置文件中定义,必须指定至少一个 @CacheEvict(value=”my cache”...) key 缓存 key,可以为空,如果指定要按照 SpEL 表达式编写,如果指定,则缺省按照方法所有参数进行组合 @CacheEvict(value=”testcache”,key=”#userName...id),我们可以通过#id拿到参数 user.id result 执行上下文 方法执行后返回值(仅方法执行之后判断有效,如‘unless’,’cache evict’beforeInvocation

    3.8K20

    SpringBoot整合Spring Cache,简化分布式缓存开发

    Spring3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同缓存技术;并支持使用...指定了allEntries为true时,Spring Cache将忽略指定key。有的时候我们需要Cache一下清除所有的元素,这比一个一个清除元素更有效率。 ​...@CachePut ​ 根据返回值更新缓存,【双写模式】 @Caching ​ 组合多个缓存操作; ​ @Caching允许在同一方法上使用多个嵌套 @Cacheable、@CachePut和...EnableConfigurationProperties(CacheProperties.class)//开启属性配置绑定功能 @Configuration @EnableCaching //开启缓存启动注解启动移到这里...这种方式适用于比较极端场景,例如流量特别特别大场景,使用时需要考虑业务能接受数据不一致时间,还有就是异常情况处理,不要到时候缓存刷新上,一直是脏数据,那就凉了。 加互斥锁。

    1.1K20

    品味Spring Cache设计之美

    最近负责教育类产品架构工作,两位研发同学建议:“团队封装Redis客户端可否适配Spring Cache,这样加缓存就会方便多了” 。...代理方法调用前可以获取方法参数,调用方法结束后,可以获取调用该方法返回值,通过这种方式就可以实现缓存逻辑。 2.2 缓存声明 缓存声明,也就是标识需要缓存方法以及缓存策略。...我们重点讲解:@Cacheable,@CachePut,@CacheEvict三个核心注解。 2.2.1 @Cacheable注解 @Cacheble注解表示这个方法有了缓存功能。...去掉unless属性,则结果会被缓存。 2.2.3 @CacheEvict注解 @CacheEvict 注解方法在调用时会从缓存中移除已存储数据。...Spring CacheSimple实现,缓存配置需要实现两个接口: org.springframework.cache.CacheManager org.springframework.cache.Cache

    36040

    Spring cache原理详解

    一、概述 Spring3.1版本开始,Spring框架就支持显式地将缓存添加到现有的Spring应用程序中。与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码侵入最小。...三、源码&原理解析 我们主要从spring-context和spring-boot-autoconfige两个包cache模块分析cache原理。...该方法前半段是从缓存中获取目标是否被代理过,如果被代理过直接把增强逻辑织入,避免重复创建代理,后半段就是生成代理逻辑,创建代理过程我们之前分析过,此处不再分析,重点分析一下候选增强器中获取增强逻辑方法...,其实就是检查目标方法上是否有缓存相关注解(@Cacheable,@CachePut,@CacheEvict等),如果有说明增强器对目标代理适用,然后找到合适增强器列表在APC中调用createProxy...,一共10种,基本覆盖了所有流行缓存类型,主要mappings也放入了NoOpCacheConfiguration无缓存配置,启用缓存时使用该配置,可以理解为一种特殊缓存。

    1.8K21

    品味Spring Cache设计之美

    最近负责教育类产品架构工作,两位研发同学建议:“团队封装Redis客户端可否适配Spring Cache,这样加缓存就会方便多了” 。...代理方法调用前可以获取方法参数,调用方法结束后,可以获取调用该方法返回值,通过这种方式就可以实现缓存逻辑。 2.2 缓存声明 缓存声明,也就是标识需要缓存方法以及缓存策略。...我们重点讲解:@Cacheable,@CachePut,@CacheEvict三个核心注解。 2.2.1 @Cacheable注解 @Cacheble注解表示这个方法有了缓存功能。...去掉unless属性,则结果会被缓存。 2.2.3 @CacheEvict注解 @CacheEvict 注解方法在调用时会从缓存中移除已存储数据。...Spring CacheSimple实现,缓存配置需要实现两个接口: org.springframework.cache.CacheManager org.springframework.cache.Cache

    44010

    springboot-cache简单使用

    springboot-cache 简单使用 springboot-cache介绍 一、前言 Spring Cache 对 Cahce 进行了抽象,提供了 @Cacheable、@CachePut、@CacheEvict...springboot-cache注解讲解 1、@Cacheable注解 @Cacheable注解作用是Spring在调用该方法之前,首先在缓存中查找方法返回值,默认key是根据参数值生成,如果存在...2.去Cache中查找缓存内容,使用一个key,默认就是方法参数值; ​ key是按照某种策略生成;默认是使用keyGenerator生成Spring默认加载是SimpleCacheManage...:指定符合条件情况下才缓存 condition = “#a0=1” 方法中第一个参数=1时候才进行缓存 5.unless:否定缓存;unless指定条件为true,方法返回值就不会被缓存;可以获取到结果进行判断...使用时只需要修改注解key属性即可: @Cacheable(cacheNames = "product",keyGenerator = "myKeyGenerator") 3、 @CachePut @

    74020
    领券