是一个组注解 @CacheConfig 类级别的全局缓存注解 完整示例 概述 Spring Cache提供了5种可以在方法级别或者类级别上使用的缓存注解。...foo() 方法等,都是可以轻松做到的. ---- @Cacheable :主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 @Cacheable是最主要注解,它指定了被注解方法的返回值是可以被缓存的...现实中并不总是如此,有些情况下我们希望方法一定会被调用,因为其除了返回一个结果,还做了其他事情,例如记录日志,调用接口等,这个时候,我们可以用 @CachePut 注释,这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中...---- @Caching 主要针对方法配置, 是一个组注解 @Caching 是一个组注解,可以为一个方法定义提供基于@Cacheable、@CacheEvict或者@CachePut注解的数组。...前面的4个注解都是基于方法的,如果在同一个类中需要缓存的方法注解属性都类似,则需要一个个的重复增加,Spring4增加了@CacheConfig类级别的注解解决这个问题。
对于缓存声明,spring的缓存提供了一组java注解: @Cacheable:触发缓存写入。 @CacheEvict:触发缓存清除。 @CachePut:更新缓存(不会影响到方法的运行)。...@Cacheable注解 顾名思义,@Cacheable可以用来进行缓存的写入,将结果存储在缓存中,以便于在后续调用的时候可以直接返回缓存中的值,而不必再执行实际的方法。...@CachePut注解 @CachePut:当需要更新缓存而不干扰方法的运行时 ,可以使用该注解。也就是说,始终执行该方法,并将结果放入缓存,注解参数与@Cacheable相同。...descriptor) 通常强烈建议不要对同一方法同时使用@CachePut和@Cacheable注解,因为它们具有不同的行为。...,我们可以使用@CacheConfig在类上进行全局设置。
在SpringBoot项目中整合EhCache做缓存,具体步骤如下: 1.pom.xml 我们在pom.xml中引入相关依赖: <!...:@EnableCaching 启动类加此注解后,会自动开启SpringBoot对缓存的支持 @EnableCaching 3.配置文件ehcache.xml 在resources包下新建一个ehcache.xml...配置文件,用于配置ehcache缓存的参数,我这里习惯在resources下再建一个resource文件夹,专门存放配置文件,所以我这里的结构是:main\resources\resource\ehcache.xml...,添加@CacheConfig(),然后在需要缓存的方法上添加对应的缓存注解。...在这里@CacheConfig(cacheNames = "user"):配置了该数据访问对象中返回的内容将存储于名为user的缓存对象中,我们也可以不使用该注解,直接通过@Cacheable自己配置缓存集的名字来定义
-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 --> <cache:annotation-driven cache-manager="...<em>可以</em>直接在service方法上面开启<em>注解</em>: 有4个<em>注解</em>@<em>Cacheable</em>,@<em>CachePut</em> , @CacheEvict,@<em>CacheConfig</em> @<em>Cacheable</em>、@<em>CachePut</em>、@CacheEvict...,在 spring 配置<em>文件</em><em>中</em>定义,必须指定至少一个例如:这里和上面的name <em>的</em>value对应,楼主这里写<em>的</em>是common @<em>Cacheable</em>(value=”mycache”) 或者 @<em>Cacheable</em>...,和 @<em>Cacheable</em> 不同<em>的</em>是,它每次都会触发真实方法<em>的</em>调用 @<em>CachePut</em> 主要<em>的</em>参数 value 缓存<em>的</em>名称,在 spring 配置<em>文件</em><em>中</em>定义,必须指定至少一个例如: @<em>Cacheable</em>...()里面都有一个value=“xxx”<em>的</em>属性,这显然如果方法多了,写起来也是挺累<em>的</em>,如果<em>可以</em>一次性声明完 那就省事了, 所以,有了@<em>CacheConfig</em>这个配置,@<em>CacheConfig</em> is a
EhcacheDemo的工作步骤如下: 在EhcacheDemo中,我们引用ehcache.xml声明的名为helloworld的缓存来创建Cache对象; 然后我们用一个键值对来实例化Element对象...// 除了可以使用xml文件中配置的缓存,你也可以使用API动态增删缓存 // 添加缓存 manager.addCache(cacheName); // 使用默认配置添加缓存 CacheManager...你有两个选择: 在xml中声明:像上一节spring-ehcache.xml中的做法一样,使用 使用标记注解:你也可以通过对一个类进行注解修饰的方式在这个类中使用缓存注解。...下面三个注解都是方法级别: @Cacheable 表明所修饰的方法是可以缓存的:当第一次调用这个方法时,它的结果会被缓存下来,在缓存的有效时间内,以后访问这个方法都直接返回缓存结果,不再执行方法中的代码段...@CachePut 与@Cacheable不同,@CachePut不仅会缓存方法的结果,还会执行方法的代码段。 它支持的属性和用法都与@Cacheable一致。
EhcacheDemo的工作步骤如下: 在EhcacheDemo中,我们引用ehcache.xml声明的名为helloworld的缓存来创建Cache对象; 然后我们用一个键值对来实例化Element...使用CacheManager的addCache方法可以根据缓存名将ehcache.xml中声明的cache添加到容器中;它也可以直接将Cache对象添加到缓存容器中。...// 除了可以使用xml文件中配置的缓存,你也可以使用API动态增删缓存 // 添加缓存 manager.addCache(cacheName); // 使用默认配置添加缓存 CacheManager...下面三个注解都是方法级别: @Cacheable 表明所修饰的方法是可以缓存的:当第一次调用这个方法时,它的结果会被缓存下来,在缓存的有效时间内,以后访问这个方法都直接返回缓存结果,不再执行方法中的代码段...@CachePut 与@Cacheable不同,@CachePut不仅会缓存方法的结果,还会执行方法的代码段。 它支持的属性和用法都与@Cacheable一致。
超时时间未生效 关键的问题在于没有指定缓存类型为ehcache,ehcache.xml文件压根就没有生效。...key的生成策略,需在@Cacheable注解中通过keyGenerator属性指定具体的key生成策略 * 可以根据业务情况,配置多个生成策略 * 如: @Cacheable(value...key,使用@Cacheable等注解时,将其value属性设置为dictionary,那么这个dictionary的缓存失效时间就是这里我们自定义的失效时间(cacheExpireTime)...= "#name") 其中 cacheNames 时缓存的名称也可以使用value,使用Ehcache的时候,如果和XML配置中的对应,可以生效对应的规则,如果不对应会使用默认规则。...@CacheEvict 清空缓存 @CacheConfig 所有的@Cacheable()里面都有一个value="xxx"的属性,这显然如果方法多了,写起来也是挺累的,我们可以在类上声明@CacheConfig
同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用 Gzip压缩提高响应速度。 1.pom.xml <!...配置文件 新建ehcache.xml,在resources包下 <?...4.持久层和方法上加上注解 我这里持久层用的jpa,在持久层上加上@CacheConfig(cacheNames = "user"),cacheNames 可以自定义,这是缓存的key,哪个方法需要缓存...在这里@CacheConfig(cacheNames = "users"):配置了该数据访问对象中返回的内容将存储于名为users的缓存对象中,我们也可以不使用该注解,直接通过@Cacheable自己配置缓存集的名字来定义...除了这里用到的两个注解之外,还有下面几个核心注解: @CachePut:配置于函数上,能够根据参数定义条件来进行缓存,它与@Cacheable不同的是,它每次都会真是调用函数,所以主要用于数据新增和修改操作上
使用Spring缓存抽象时我们需要关注以下两点; 确定方法需要被缓存以及他们的缓存策略 从缓存中读取之前缓存存储的数据 二:几个重要概念&缓存注解 名称 解释 Cache 缓存接口,定义缓存操作。...序列化策略 @CacheConfig 统一配置本类的缓存注解的属性 @Cacheable/@CachePut/@CacheEvict 主要的参数 名称 解释 value 缓存的名称,在 spring...配置文件中定义,必须指定至少一个。...深入源码,查看它的其它属性 我们打开@Cacheable注解的源码,可以看到该注解提供的其他属性,如: String[] cacheNames() default {}; //和value注解差不多,二选一...当我们需要缓存的地方越来越多,你可以使用@CacheConfig(cacheNames = {"myCache"})注解来统一指定value的值,这时可省略value,如果你在你的方法依旧写上了value
,Redis 把数据对象都存储在内存当中,它可以支持周期性的把更新的数据写入磁盘文件中。...@Cacheable: 作用于方法上,用于对于方法返回结果进行缓存,如果已经存在该缓存,则直接从缓存中获取,缓存的key可以从入参中指定,缓存的 value 为方法返回值。...上面注解中的常用配置参数: value: 缓存管理器中配置的缓存的名称,这里可以理解为一个组的概念,缓存管理器中可以有多套缓存配置,每套都有一个名称,类似于组名,这个可以配置这个值,选择使用哪个缓存的名称...如果我们需要灵活设置缓存,可以不用 SpringCache 提供的注解,直接在代码中使用 Spring-data-redis 包提供的方法,手动操作 key 与 value。...,里面使用 @Cacheable、@CachePut、@CacheEvict 三个注解完成对用户与用户信息数据的缓存。
spring cache spring cache是spring框架自带的一套缓存框架,其具有多种实现,比较常用的是基于Redis的实现,其核心注解有 @CacheConfig,@Cacheable,@...CachePut,@CacheEvict,不熟悉用法的可以参考官方文档,有很详细的说明,https://docs.spring.io/spring-framework/docs/current/reference...这里主要介绍一下@CacheConfig这个注解,此注解有四个属性,cacheNames 用于指定缓存名字,可以按照在缓存中按模块保存,keyGenerator 缓存键生成器,如果指定了缓存键则忽略,cacheManager...@ICacheConfig对原生注解@CacheConfig做了再封装,增加了三个属性,另外三个注解只是对spring cache对应的原生注解起了个别名,以后可能会有拓展的需要。...allEntries = true) public void deleteById(Integer id) { log.debug("删除 {}", id); } } 在配置文件中开启缓存
模块 3.4、主要注解例子实践 3.4.1、@EnableCaching 3.4.2、@Cacheable注解 3.4.3、@CachePut注解 3.4.4、 @CacheEvic注解 3.4.5、@...接口来统一不同的缓存技术;并支持使用Java Caching(JSR-107)注解简化我们进行缓存开发。...注解 @CachePut注解也是一个用来缓存的注解,不过缓存和@Cacheable有明显的区别是即调用方法,又更新缓存数据,也就是执行方法操作之后再来同步更新缓存,所以这个主键常用于更新操作,也可以用于查询...@Caching 用于定义复杂的缓存规则,可以集成@Cacheable和 @CachePut // @Caching 定义复杂的缓存规则 @Caching( cacheable...注解 @CacheConfig注解可以用于抽取缓存的公共配置,然后在类加上就可以,eg:@CacheConfig(cacheNames = {"emp"},cacheManager = "employeeCacheManager
缓存中spel表达式可取值 @CachePut @CacheEvict @Caching @CacheConfig 自定义缓存注解 完整应用案例 结合源码剖析注解的运行流程 入口:基于AOP的拦截器...但我们仍然需要显式地在代码中去调用与缓存有关的接口和方法,在合适的时候插入数据到缓存里,在合适的时候从缓存中读取数据。 想一想AOP的适用场景,这不就是天生就应该AOP去做的吗?...比如之前的那个@Caching组合,会让方法上的注解显得整个代码比较乱,此时可以使用自定义注解把这些注解组合到一个注解中,如: @Caching(put = { @CachePut(value...前面提到的几个注解@Cacheable、@CachePut、@CacheEvict、@CacheConfig,都有一些可配置的属性。...这里的condition也是@Cacheable中定义的一个配置,它是一个EL表达式,比如我们可以这样用来缓存id大于1的Book: @Override @Cacheable(cacheNames =
@CachePut:表示一个方法可以使用缓存,无论缓存中是否已经存在相应的数据,都执行方法并将结果存储到缓存中。@CacheEvict:表示从缓存中删除指定的缓存项。...以下是Spring Boot中基本的缓存配置示例:首先,需要在pom.xml中添加缓存相关的依赖项,例如: org.springframework.boot...在应用程序中配置多个缓存管理器时,可以使用@Cacheable注解的cacheNames属性指定使用哪个缓存管理器。此外,还可以使用@CacheConfig注解在类级别上设置缓存名称和其他属性。...同时,@Cacheable注解没有指定缓存名称,因此它将使用@CacheConfig注解中设置的缓存名称。...")); factoryBean.setShared(true); return factoryBean;}在上面的示例中,我们使用了Ehcache作为缓存管理器的实现,并将Ehcache配置文件的位置设置为
Spring cache的注解如何使用 在spring cache与redis集成之后,我们就可以使用spring cache自带的注解功能 缓存的主要使用方式包括以下两方面 缓存的声明,需要根据项目需求来妥善的应用缓存...缓存的配置方式,选择需要的缓存支持,例如Ecache、redis、memercache等 @CacheConfig:该注解是可以将缓存分类,它是类级别的注解方式。...@Cacheable:主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 1.如果key不存在,执行方法体,并将结果更新到缓存中。 2.如果key存在,直接查询缓存中的数据。...,会让方法显的较臃肿,可以通过自定义注解把这些注解组合到一个注解中,如: @Caching(put = { @CachePut(value = "user", key = "#user.id"), @CachePut...,默认提供的CacheManager对象可能不能满足需要 // 因此建议依赖业务和技术上的需求,自行做一些扩展和定制 // 这样就可以在使用Spring4中的@Cacheable、@CachePut
这里采用第二个,在 pom.xml 文件中,引入 Ehcache 依赖: org.springframework.boot...注意 默认情况下,这个文件名是固定的,必须叫 ehcache.xml ,如果一定要换一个名字,那么需要在 application.properties 中明确指定配置文件名,配置方式如下: spring.cache.ehcache.config...@CacheConfig 这个注解在类上使用,用来描述该类中所有方法使用的缓存名称,当然也可以不使用该注解,直接在具体的缓存注解上配置名称,示例代码如下: @Service@CacheConfig(cacheNames...Cacheable 注解中,通过 key 属性来指定 key ,如上代码就表示只使用 id 作为缓存的 key ,如果对 key 有复杂的要求,可以自定义 keyGenerator 。...这个注解一般加在更新方法上,当数据库中的数据更新后,缓存中的数据也要跟着更新,使用该注解,可以将方法的返回值自动更新到已经存在的 key 上,示例代码如下: @CachePut(key = "#user.id
添加依赖在pom.xml中添加Spring Boot和Redis相关的依赖: org.springframework.boot</groupId...在Spring Cache抽象中,有三个常用的注解:@Cacheable、@CachePut和@CacheEvict。...这些注解可以帮助我们在方法上定义缓存行为,使得开发者能够轻松地添加缓存功能到应用程序中。✈️ @Cacheable@Cacheable注解用于声明一个方法的结果是可以缓存的。...✈️ @CachePut @CachePut注解用于声明一个方法的结果应该被放入缓存中。每次调用该方法时,都会执行方法并将结果存入缓存,无论缓存中是否已存在该键值对。...通过使用这些注解,可以轻松地在方法上定义缓存行为,从而提高应用程序的性能和响应速度。在实际项目中,我们可能需要根据需求选择合适的注解来实现不同的缓存策略。
在 spring 配置文件中定义,必须指定至少一个 例如: @Cacheable(value=”mycache”) @Cacheable(value={”cache1”,”cache2”} key 缓存的...这里的缓存中的 key 就是参数 userName,value 就是 Account 对象。“accountCache”缓存是在 spring*.xml 中定义的名称。...不同的是,它每次都会触发真实方法的调用 @CachePut 作用和配置方法 参数 解释 example value 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 @CachePut(...所有的@Cacheable()里面都有一个value=“xxx”的属性,这显然如果方法多了,写起来也是挺累的,如果可以一次性声明完 那就省事了, 所以,有了@CacheConfig这个配置,@CacheConfig...@Caching组合,会让方法上的注解显得整个代码比较乱,此时可以使用自定义注解把这些注解组合到一个注解中,如: @Caching(put = { @CachePut(value = “user”,
的实现类中 接着会生成被@Cacheable(或者其他SpringCache注解修饰过)的代理类,并会将管理它的CacheManager赋值进去 1.依赖 无需依赖,spingboot 已经集成,开启使用就行...) 中的key @Cacheable/@CachePut/@CacheEvict 参数详解: 参数作用value、cacheName缓存名称,数组类型,至少定义一个,例如:@Cacheable...若需要指定一个自定义的key生成器,我们需要去实现org.springframework.cache.interceptor.KeyGenerator接口,并使用该参数来指定。...@CachePut,此注解的方法会直接进入,将更新后数据放入cacheNames的缓存。...类似更新操作 @CacheEvict 清除所有缓存 一个类注解 @CacheConfig 当我们需要缓存的地方越来越多,你可以使用@CacheConfig(cacheNames = {“myCache
引言 redis缓存的有效期可以通过xml配置文件设置(默认有效期),也可以通过编码的方式手动去设置,但是这两种方式都存在缺陷。...xml方式设置的是全局的默认有效期,虽然灵活,但不能给某个缓存设置单独的有效期;硬编码方式虽然可以给不同的缓存设置单独的有效期,但是管理上不够灵活。...Spring提供的Cache相关注解中并没有提供有效期的配置参数,so,自定义注解实现缓存有效期的灵活设置诞生了。...,void setExpires(Map expires),该方法的传入参数是一个Map,Map的key值是@Cacheable(或@CacheEvict或@CachePut...newHashSet(cacheConfig.cacheNames()) : newHashSet(cacheable.value()); } } Spring的xml配置 完整配置redisCacheContext.xml
领取专属 10元无门槛券
手把手带您无忧上云