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

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

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

1.8K10

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

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

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

36820

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

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

35410

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

58720

Spring boot缓存使用

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

91810

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

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

33120

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

Spring cache原理详解

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

63330

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

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

40820

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.7K70

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.5K20

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 //开启缓存启动注解启动移到这里...这种方式适用于比较极端场景,例如流量特别特别大场景,使用时需要考虑业务能接受数据不一致时间,还有就是异常情况处理,不要到时候缓存刷新上,一直是脏数据,那就凉了。 加互斥锁。

98920

品味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

34640

Spring cache原理详解

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

1.6K21

品味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

42810

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 @

68320

Spring基于注解整合Redis

方法被调用时Spring会先检查缓存中是否存在对应结果,如果存在,则直接返回缓存结果;如果不存在,则执行该方法,并将结果存入缓存。...4.2 @CachePut@CachePut注解可以应用在方法上,用于更新缓存。方法被调用时Spring会先执行该方法,并将结果存入缓存,而不会去检查缓存中是否已存在。...4.3 @CacheEvict@CacheEvict注解可以应用在方法上,用于删除缓存。方法被调用时Spring会从缓存中删除对应结果。...例如,key = "#userId"中#表示后面跟随是一个SpEL表达式。 你可以使用SpEL表达式来引用方法参数、调用方法、访问属性等,以灵活地生成缓存key。5....;import org.springframework.cache.annotation.CacheEvict;import org.springframework.cache.annotation.Cacheable

10610
领券