首页
学习
活动
专区
圈层
工具
发布

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

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

2.5K10

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类级别的注解解决这个问题。

95220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    优化您的Spring应用程序:缓存注解的精要指南

    在本篇博客中,我们将深入研究Spring的@Cacheable、@CacheEvict、@CachePut等缓存注解,了解它们的工作原理,以及如何使用它们来优化您的Spring应用程序。...当一个被@Cacheable注解的方法被调用时,Spring会首先查找缓存,如果缓存中已经存在该方法的结果,就直接返回缓存中的数据,而不执行方法体。...如果缓存中没有数据,那么方法会被执行,并将结果缓存起来,以便下次调用时可以直接返回缓存中的数据。 2. @CacheEvict: 用于触发缓存的eviction(即清除缓存)。...@CacheConfig: 用于在类级别设置一些缓存相关的共同配置。 可以在类上使用,以提供一些默认的缓存配置,然后在方法上使用具体的缓存注解来覆盖这些默认配置。...为了启用注解支持,您需要执行以下步骤: 添加@EnableCaching注解: 在您的Spring Boot应用程序的主配置类上添加@EnableCaching注解。

    11910

    Spring Cache简明教程

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

    19310

    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

    41220

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

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

    84811

    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

    62220

    谈谈你对本地缓存的理解?

    、@CacheEvict在 Spring 框架中,@Cacheable、@CachePut 和 @CacheEvict 是用于缓存管理的注解,它们的含义如下:@Cacheable:用于声明一个方法的返回值是可以被缓存的...当方法被调用时,Spring Cache 会先检查缓存中是否存在相应的数据。如果存在,则直接返回缓存中的数据,避免重复执行方法;如果不存在,则执行方法并将返回值存入缓存中。...与 @Cacheable 不同,@CachePut 注解的方法总是会执行,并将返回值更新到缓存中。...当方法被调用时,指定的缓存项将被删除。这可以用于清除旧数据或使缓存项失效。...它的使用示例如下:@CacheEvict(value = "users", key = "#id")public void deleteUser(String id) {// 模拟从数据库中删除用户信息

    18010

    谈谈你对本地缓存的理解?

    、@CacheEvict 在 Spring 框架中,@Cacheable、@CachePut 和 @CacheEvict 是用于缓存管理的注解,它们的含义如下: @Cacheable:用于声明一个方法的返回值是可以被缓存的...当方法被调用时,Spring Cache 会先检查缓存中是否存在相应的数据。如果存在,则直接返回缓存中的数据,避免重复执行方法;如果不存在,则执行方法并将返回值存入缓存中。...与 @Cacheable 不同,@CachePut 注解的方法总是会执行,并将返回值更新到缓存中。...当方法被调用时,指定的缓存项将被删除。这可以用于清除旧数据或使缓存项失效。...它的使用示例如下: @CacheEvict(value = "users", key = "#id") public void deleteUser(String id) { // 模拟从数据库中删除用户信息

    36810

    Spring boot的缓存使用

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

    1.1K10

    Spring cache原理详解

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

    74630

    硬核 | 使用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.6K33

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

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

    39020

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

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

    58920

    Spring整合Ehcache管理缓存

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

    1.8K70

    重学SpringBoot3-集成Redis(二)之注解驱动

    下一次调用该方法时,Spring 会直接从缓存中返回结果,而不是再次执行方法。 @CachePut:在方法执行后将返回值放入缓存。...它与 @Cacheable 的区别在于,@CachePut 不会跳过方法执行,而是始终执行方法并更新缓存。...; @Service public class UserService { // 当方法第一次调用时,结果将被缓存起来,之后相同参数的调用将直接从缓存中获取数据 @Cacheable...id=2" ,可以从日志中看到,每次方法都执行了,并且 user 对象加入到了缓存中。 3.3 @CacheEvict 示例 为了保持缓存数据的准确性,某些情况下需要手动清除缓存中的数据。...4.1 RedisCacheConfiguration 类 Spring Boot 3 中,RedisCacheConfiguration 类是用于配置 Redis 缓存行为的核心组件之一。

    24010

    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

    4.6K20

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

    Spring从3.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.3K20
    领券