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

Spring @Cacheable,除非自定义键生成器创建了属性引用键

Spring @Cacheable是Spring框架中的一个注解,用于实现方法级别的缓存。当使用@Cacheable注解标记一个方法时,Spring会在方法执行前先检查缓存中是否存在相同参数的结果,如果存在则直接返回缓存中的结果,而不执行方法体中的代码。

@Cacheable注解可以应用于任何Spring管理的bean的方法上,包括前端开发、后端开发、软件测试等各个领域。它可以提高系统的性能和响应速度,减少对底层资源的访问次数。

@Cacheable注解可以通过指定缓存的名称、键生成器、条件等属性来定制缓存的行为。其中,除非自定义键生成器创建了属性引用键,否则默认情况下,Spring会使用方法的参数作为缓存的键。

使用@Cacheable注解的优势包括:

  1. 提高系统性能:通过缓存结果,减少方法的执行次数,从而提高系统的响应速度和吞吐量。
  2. 减少对底层资源的访问:通过缓存结果,减少对数据库、网络等底层资源的访问次数,降低系统的负载。
  3. 简化代码逻辑:通过使用@Cacheable注解,可以将缓存逻辑与业务逻辑分离,使代码更加清晰和易于维护。

@Cacheable注解适用于各种场景,包括但不限于:

  1. 频繁读取的数据:对于经常被读取但很少被修改的数据,可以使用@Cacheable注解进行缓存,提高读取性能。
  2. 计算密集型操作:对于计算量较大的操作,可以使用@Cacheable注解缓存计算结果,避免重复计算。
  3. 外部资源访问:对于需要访问外部资源(如网络接口、数据库)的操作,可以使用@Cacheable注解缓存结果,减少对外部资源的访问次数。

腾讯云提供了一系列与缓存相关的产品,可以与@Cacheable注解结合使用,例如:

  1. 腾讯云分布式缓存Redis:提供高性能、可扩展的分布式缓存服务,支持@Cacheable注解的使用。详情请参考:https://cloud.tencent.com/product/redis
  2. 腾讯云云数据库Redis版:提供高性能、可靠的云数据库服务,支持@Cacheable注解的使用。详情请参考:https://cloud.tencent.com/product/cdb_redis
  3. 腾讯云云数据库Memcached版:提供高速、可扩展的内存缓存服务,支持@Cacheable注解的使用。详情请参考:https://cloud.tencent.com/product/cdb_memcached

总结:Spring @Cacheable是一个用于实现方法级别缓存的注解,可以提高系统性能和响应速度。它适用于各种场景,并可以与腾讯云的缓存产品结合使用。

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

相关·内容

SpringBoot整合SpringCache的简单使用和介绍

参数 解释 proxyTargetClass 此属性设置为true将影响所有需要代理的Spring托管bean,而不仅仅是标记为@Cacheable mode 理模式仅允许通过代理拦截呼叫。...keyGenerator 密钥生成器 cacheManager 设置解析器和缓存管理器,并且未通过cacheResolver设置缓存解析器 cacheResolver 设置解析器和缓存管理器 @Cacheable...参考@CacheConfig的cacheNames key 支持SpEL表达式,用于动态计算密钥,默认值为"" ,这意味着所有方法参数均被视为除非已设置自定义keyGenerator 。...除非已设置自定义keyGenerator 。...由于put操作的性质,在调用方法后将评估此表达式,因此可以引用result allEntries 是否删除缓存内的所有条目。

56150

SpringBoot整合SpringCache的简单使用和介绍

参数 解释 proxyTargetClass 此属性设置为true将影响所有需要代理的Spring托管bean,而不仅仅是标记为@Cacheable mode 理模式仅允许通过代理拦截呼叫。...keyGenerator 密钥生成器 cacheManager 设置解析器和缓存管理器,并且未通过cacheResolver设置缓存解析器 cacheResolver 设置解析器和缓存管理器 @Cacheable...参考@CacheConfig的cacheNames key 支持SpEL表达式,用于动态计算密钥,默认值为"" ,这意味着所有方法参数均被视为除非已设置自定义keyGenerator 。...除非已设置自定义keyGenerator 。...由于put操作的性质,在调用方法后将评估此表达式,因此可以引用result allEntries 是否删除缓存内的所有条目。

44220

Spring Cache优化

spring cache spring cache是spring框架自带的一套缓存框架,其具有多种实现,比较常用的是基于Redis的实现,其核心注解有 @CacheConfig,@Cacheable,@...这里主要介绍一下@CacheConfig这个注解,此注解有四个属性,cacheNames 用于指定缓存名字,可以按照在缓存中按模块保存,keyGenerator 缓存生成器,如果指定了缓存则忽略,cacheManager...spring cache具有极高的易用性,在保存缓存时能够根据Spring EL表达式自由定制缓存,但是spring cache在使用过程中有两点缺陷: 在使用@CacheEvict时,如果指定了allEntries...CacheConfig.class, attribute = "cacheNames") String[] cacheNames() default {}; /** * 缓存生成器.../** * 缓存生成器 */ @AliasFor(annotation = Cacheable.class, attribute = "keyGenerator")

71920

Spring Cache-缓存注解(二)

文章目录 导读 概述 注解@Cacheable 和@CachePut 表达式值的引用 注解@CacheEvict 案例 导读 Spring-Cache手札 Spring Cache抽象-缓存注解 实战...@Cacheable 和 @CachePut 可以配置的属性接近。...如上代码所示定义redisCacheManager后就可以引用它了,而对于 key 则是缓存中的,它支持 Spring 表达式,通过 Spring 表达式就可以自定义缓存的 key。...---- 表达式值的引用 Spring 表达式和缓存注解之间的约定,通过这些约定去引用方法的参数和返回值的内容,使得其注入 key 所定义的 Spring 表达式的结果中。...定义缓存策略 当缓存中有值,则返回缓存数据,否则访问方法得到数据 通过value引用缓存管理器,通过key定义 * * @param id * 角色编号 * @

36820

Spring认证中国教育管理中心-Spring Data Neo4j教程三

你要么必须为 id 属性或类似的东西提供一个 setter ,如果你想拥有 优点:很明显 id 属性是代理业务,使用它不需要进一步的努力或配置。...上面的生成器将被配置为像这样的 bean 引用: 示例 10....值解析假定构造函数参数名称与实体的属性名称匹配,即解析将像要填充属性一样执行,包括映射中的所有自定义(不同的数据存储列或字段名称等)。...6.3.2.物业人口 一旦创建了实体的实例,Spring Data 就会填充该类的所有剩余持久属性。...除非已经由实体的构造函数填充(即通过其构造函数参数列表使用),否则将首先填充标识符属性以允许解析循环对象引用。之后,在实体实例上设置所有尚未由构造函数填充的非瞬态属性

67010

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

开发过程中因注解的优雅、使用简单使得这种方式广泛被大家所接受和使用,本文将按照先原理,再实操的步骤,一步步解惑Spring缓存注解的原理 缓存注解 关于Spring的缓存注解,一共有如下5个: @Cacheable...可定义多个(至少需要定义一个) cacheNames 同value属性 keyGenerator key生成器。字符串为:beanName key 缓存的 key。可使用SpEL。...所以还没有看这块的,此处再一次推荐:【小家Spring】玩转Spring Cache — @Cacheable/@CachePut/@CacheEvict缓存注解相关基础类打点 CacheInterceptor...下面按照正常的思路,我把Spring处理的步骤总结如下: CacheOperation封装了@CachePut、@Cacheable、@CacheEvict(下称三大缓存注解)的属性信息,以便于拦截的时候能直接操作此对象来执行逻辑...但是Spring做不了不代表我们自己做不了,因此有兴趣的同学可以在此基础上,扩展出可以自定义超时时间的能力~~~~

11.3K51

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

Spring在缓存方法的返回值时是以键值对进行缓存的,值就是方法的返回结果,至于的话,Spring又支持两种策略,默认策略和自定义策略,这个稍后会进行说明。...; } 1.1.2 使用key属性自定义key key属性是用来指定Spring缓存方法的返回结果时对应的key的。...该属性支持SpringEL表达式。当我们没有指定该属性时,Spring将使用默认策略生成key。我们这里先来看看自定义策略,至于默认策略会在后文单独介绍。...3 的生成策略 的生成策略有两种,一种是默认策略,一种是自定义策略。...3.2 自定义策略 自定义策略是指我们可以通过Spring的EL表达式来指定我们的key。这里的EL表达式可以使用方法参数及它们对应的属性

1.9K10

缓存抽象层Spring cache实战操作

4.1 @EnableCaching 该注解是启用Spring cache 的开关。必须开启才能使用Spring cache相关功能。 4.2 @Cacheable 可以标记在一个方法或者类上。...String[] cacheNames() default {}; // 该次缓存的key String key() default ""; //key的生成器。...4.3 @CacheConfig 作用于缓存接口上,来对该接口下的一些重复配置(缓存名称、key生成器、缓存管理器、缓存处理器)进行归纳处理。其他属性可参考Cacheable。...两者都可以执行缓存的“放入”操作,不同于@Cacheable,@CachePut每次都将执行方法并将返回值K-V放入缓存,如果该K存在则进行更新。其他属性可参考Cacheable。...6.2 自定义缓存配置 如果我们使用默认的配置那么所有的K-V都不会自动过期。很多情况下我们有这样的需求,验证码缓存5分钟自动过期,区域信息30分钟。那么我们就需要自定义 CacheManager。

73210

Spring Cache简明教程

根据注解的不同,Spring Cache可以执行如下操作: @Cacheable:在方法执行前先检查缓存,如果缓存中已经存在相应的数据,则直接返回缓存数据而不执行方法。...配置缓存   虽然Spring Boot为许多缓存实现提供了自动配置,但你也可以通过application.properties或application.yml文件进行自定义配置。...缓存的生成   默认情况下,Spring Cache使用方法参数的hashCode()和equals()方法来生成缓存。如果你的方法参数是自定义的对象,确保这些方法被适当地覆盖。...你也可以通过实现KeyGenerator接口或使用key属性自定义的生成。 缓存内容的一致性   缓存数据可能会与数据库中的数据不一致。...缓存生成:覆盖hashCode()和equals()或自定义的生成。 缓存内容一致性:使用注解确保缓存与数据源同步。 并发问题:可能需要锁或其他同步机制。 缓存穿透:使用布隆过滤器或缓存空查询。

4310

学习下真正的缓存之王,以及在Spring Boot中的使用!

expireAfter(Expiry): 自定义策略,过期时间由Expiry实现独自计算。缓存的删除策略使用的是惰性删除和定时删除。这两个删除策略的时间复杂度都是O(1)。 3....注意:CacheWriter不能与弱或AsyncLoadingCache一起使用。 我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。...使用注解来对 cache 增删改查 我们可以使用spring提供的 @Cacheable、@CachePut、@CacheEvict等注解来方便的使用caffeine缓存。...key时我们也可以将“#root”省略,因为Spring默认使用的就是root对象的属性。...·································· 你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书过业、国企4年互联网6年。

2K10

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

一、Cache缓存简介 从Spring3开始定义Cache和CacheManager接口来统一不同的缓存技术; Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache接口下Spring...,放进缓存中 Cacheable 注解属性 cacheNames/value:指定方法返回结果使用的缓存组件的名字,可以指定多个缓存 key:缓存数据使用的key key/keyGenerator:key...的生成器,可以自定义 cacheManager:指定缓存管理器 cacheResolver:指定缓存解析器 condition:指定符合条件的数据才缓存 unless:否定缓存;当unless指定的条件为...6、@EnableCaching 开启基于注解的缓存 7、keyGenerator 缓存数据时key生成策略 8、@CacheConfig 统一配置本类的缓存注解的属性 三、与SpringBoot2.0...Cache 的 key 生成器 */ @Bean("oneKeyGenerator") public KeyGenerator getKeyGenerator (){

63420

SpringBoot系列之缓存使用教程

缓存有效期可以通过ExpiryPolicy设置 2.2、JSR107图示 引用尚硅谷视频课件中的图示: ?...三、Spring缓存使用 3.1、重要注解简介 例子实践之前,先简单介绍Spring提供的重要缓存注解 @Cacheable:针对方法配置,能够根据方法的请求参数对其结果进行缓存 @CacheEvict...注解 @Cacheable注解的作用,前面也简介了,主要是针对方法配置,能够根据方法的请求参数对其结果进行缓存,介绍一下注解的主要属性 cacheNames/value:指定缓存组件的名字,数组形式 key...keyGenerator,使用属性keyGenerator = "myKeyGenerator 定义一个@Bean类,将KeyGenerator添加到Spring容器 @Configuration public...有明显的区别是即调用方法,又更新缓存数据,也就是执行方法操作之后再来同步更新缓存,所以这个主键常用于更新操作,也可以用于查询,主键属性和@Cacheable有很多类似的,详情参看@link @CachePut

81030

Spring注解缓存设计原理及实战

特点 基于注解和AOP,使用方便 开箱即用,不用安装和部署额外的第三方组件即可使用缓存 可以配置Condition和SPEL,能使用对象的任何属性或者方法来定义缓存的key和使用规则条件 支持自定义key...而Spring Cache利用了Spring AOP的动态代理技术,即当客户端尝试调用pojo的foo()方法的时候,给它的不是pojo自身的引用,而是一个动态生成的代理类 Spring动态代理调用图...Spring Cache主要使用如下注解 @Cacheable @CachePut @CacheEvict 主要针对方法上注解使用,部分场景也可类上注解。当在类上使用时,该类所有方法都将受影响。...这时就需要自定义你缓存方案了,Spring也想到了这点。...Spring Cache的原理是基于动态生成的proxy代理机制来进行切面处理,关键点是对象的引用问题,如果对象的方法是类里面的内部调用(this引用)而不是外部引用的场景下,会导致proxy失败,那么我们所做的缓存切面处理也就失效了

33210

Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程十三

正如在Spring数据其他注释为Apache的Geode的基于注解配置模型中,@EnableDiskStore 并@EnableDiskStores有相关的配置属性一起许多属性自定义DiskStores...Spring Data for Apache Geode 还提供了DiskStoreConfigurer回调接口,可以在 Java 配置中声明,代替配置属性DiskStore在运行时自定义一个,如下例所示...可以创建不同类型的索引,例如 索引 和哈希索引。 Spring Data for Apache Geode 可以轻松地在存储和访问数据的区域上创建索引。...注释的字段或属性在存储条目时用作 Region 中的....对于识别要在服务操作中使用的缓存的任何 Spring 缓存注解(即@Cacheable、@CachePut和@CacheEvict),都是如此。

43920

Spring boot的缓存使用

@Cacheable 它在方法级别上使用,让spring知道该方法的响应是可缓存的。Spring将此方法的请求/响应管理到注释属性中指定的缓存。...例如,@Cacheable ("cache-name1", “cache-name2”)。 @Cacheable注释有更多选项。...就像我们可以从方法的请求中指定缓存的,如果没有指定,spring使用所有类字段并将其用作缓存(主要是HashCode)来维护缓存,但我们可以通过提供关键信息来覆盖此行为: @Cacheable(value...它与@Cacheable支持相同的选项,应该用于缓存填充,而不是方法流优化。 请注意,通常不鼓励对同一方法使用@CachePut和@Cacheable注释,因为它们具有不同的行为。...我们可以在这里指定来删除缓存,如果我们需要删除缓存的所有条目,那么我们需要使用allEntries=true。

93710
领券