转自:http://tom-seed.iteye.com/blog/2104430
参考资料
http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/
http://swiftlet.net/archives/774
缓存注解有以下三个:
@Cacheable @CacheEvict @CachePut
@Cacheable(value=”accountCache”),这个注释的意思是,当调用这个方法的时候,会从一个名叫 accountCache 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的 key 就是参数 userName,value 就是 Account 对象。“accountCache”缓存是在 spring*.xml 中定义的名称。
示例:
- @Cacheable(value="accountCache")// 使用了一个缓存名叫 accountCache
- public Account getAccountByName(String userName) {
- // 方法内部实现不考虑缓存逻辑,直接实现业务
- System.out.println("real query account."+userName);
- return getFromDB(userName);
- }
@CacheEvict 注释来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存。注意其中一个 @CacheEvict(value=”accountCache”,key=”#account.getName()”),其中的 Key 是用来指定缓存的 key 的,这里因为我们保存的时候用的是 account 对象的 name 字段,所以这里还需要从参数 account 对象中获取 name 的值来作为 key,前面的 # 号代表这是一个 SpEL 表达式,此表达式可以遍历方法的参数对象,具体语法可以参考 Spring 的相关文档手册。
示例:
- @CacheEvict(value="accountCache",key="#account.getName()")// 清空accountCache 缓存
- public void updateAccount(Account account) {
- updateDB(account);
- }
- @CacheEvict(value="accountCache",allEntries=true)// 清空accountCache 缓存
- public void reload() {
- reloadAll()
- }
- @Cacheable(value="accountCache",condition="#userName.length() <=4")// 缓存名叫 accountCache
- public Account getAccountByName(String userName) {
- // 方法内部实现不考虑缓存逻辑,直接实现业务
- return getFromDB(userName);
- }
@CachePut 注释,这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中,实现缓存与数据库的同步更新。
示例:
- @CachePut(value="accountCache",key="#account.getName()")// 更新accountCache 缓存
- public Account updateAccount(Account account) {
- return updateDB(account);
- }
@Cacheable、@CachePut、@CacheEvict 注释介绍
通过上面的例子,我们可以看到 spring cache 主要使用两个注释标签,即 @Cacheable、@CachePut 和 @CacheEvict,我们总结一下其作用和配置方法。
表 1. @Cacheable 作用和配置方法
@Cacheable 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存@Cacheable 主要的参数 | ||
value | 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 | 例如: @Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”} |
key | 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 | 例如: @Cacheable(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 | 例如: @Cacheable(value=”testcache”,condition=”#userName.length()>2”) |
表 2. @CachePut 作用和配置方法
@CachePut 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实方法的调用@CachePut 主要的参数 | ||
value | 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 | 例如: @Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”} |
key | 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 | 例如: @Cacheable(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 | 例如: @Cacheable(value=”testcache”,condition=”#userName.length()>2”) |
表 3. @CacheEvict 作用和配置方法
@CachEvict 的作用 主要针对方法配置,能够根据一定的条件对缓存进行清空@CacheEvict 主要的参数 | ||
value | 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 | 例如: @CachEvict(value=”mycache”) 或者 @CachEvict(value={”cache1”,”cache2”} |
key | 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 | 例如: @CachEvict(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才清空缓存 | 例如: @CachEvict(value=”testcache”, condition=”#userName.length()>2”) |
allEntries | 是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存 | 例如: @CachEvict(value=”testcache”,allEntries=true) |
beforeInvocation | 是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存 | 例如: @CachEvict(value=”testcache”,beforeInvocation=true) |
相关推荐
Spring 缓存注解 @Cacheable、@CachePut、@CacheEvict 使用详解 Spring 框架提供了三个缓存注解:@Cacheable、@CachePut 和 @CacheEvict,这三个注解可以帮助开发者简化缓存的使用,提高应用程序的性能。在本文中,...
Spring Cache提供了基于注解的缓存支持,允许开发者在方法级别声明缓存行为。通过在方法上使用`@Cacheable`、`@CacheEvict`和`@Caching`等注解,可以轻松地控制缓存的存取和清除。 1. **@Cacheable**:这个注解用于...
这篇我们讲讲怎么使用SpringCache中的@CachePut。 功能说明 我们在日常使用缓存的时候,不仅需要添加缓存、删除缓存,更需要更新缓存。Springcache中如何来实现缓存的更新呢?不错,@CachePut就能帮助我们来实现...
在Spring3.1以后增加了一项happy的技术点,就是基于注解来实现缓存的技术。他的本质上不是具体的缓存方案实现,而是一个对缓存的抽象,让我们通过注解,实现少量的代码,达到实现缓存的方案。 Cacheable的说明 @...
在本篇内容中,我们将聚焦于`@CachePut`注解的使用,这是一种特殊的缓存注解,用于将方法的执行与缓存更新相结合。 `@CachePut`是Spring Cache模块提供的一个注解,它的主要作用是在方法执行后将结果存入指定的缓存...
在应用中启用Spring Cache,我们需要创建一个配置类,该类使用`@EnableCaching`注解开启缓存功能。同时,为了处理缓存中的对象序列化问题,我们使用Fastjson替换默认的JDK序列化。这通常涉及到创建一个自定义的`...
这个注解是Spring Cache的核心,用于标记那些可缓存的方法。当一个带有@Cacheable的方法被调用时,Spring会检查是否有已缓存的结果。如果有,它会立即返回,而不会执行方法本身。如果缓存中没有,执行方法并把结果...
在本文中,我们将深入探讨如何在Spring Boot 1.x版本中使用Spring注解来实现J2Cache的两级缓存机制,其中包括一级缓存Ehcache和二级缓存Redis。通过这种方式,我们可以显著提高应用程序的性能,减少对数据库的依赖,...
Spring 缓存机制的实现主要有两种方法:使用 Spring 与 Ehcache 结合,使用注解的方式对指定的方法进行缓存;封装 Guava 缓存,使用 Guava 包中的缓存机制。 方法一:使用 Spring 与 Ehcache 结合 使用 Spring 与 ...
这个注解会开启缓存注解的处理,使我们可以在方法上使用`@Cacheable`、`@CacheEvict`等注解。 2. **配置缓存**: 需要在Spring配置中声明所使用的缓存 provider。例如,如果选择EhCache作为缓存管理器,需要添加...
JetCache 是一个专为 Java 应用设计的高效、轻量级的缓存系统封装框架,旨在简化缓存的管理和使用。它通过提供统一的 API 接口和注解,使得开发者能够快速地在项目中集成缓存功能,提升应用程序的性能和响应速度。...
beforeInvocation的意思是:当执行注解标注的这个方法之前限制性清除缓存的操作,这样就会使得,不管这个方法执行是否成功,该缓存都会被清除。保证了清除缓存的效果。 他的默认值是false。当为false的时候不执行。...
最后,我们可以在需要缓存结果的业务方法上使用自定义的`@CacheResult`注解。例如: ```java @Service public class UserService { @CacheResult public User getUserById(Long id) { // 这里的查询会被缓存,...
4. **启用缓存注解**:在需要缓存的方法或类上使用 `@Cacheable`、`@CacheEvict` 和 `@CachePut` 注解。 **四、实战案例** 以下是一个简单的使用示例,展示了如何在 Spring Boot 应用中使用 Redis 集群和 `@...
在提供的"20140527demoSpringCache"示例中,可能包含了一个完整的Spring缓存示例应用,包括配置文件、缓存管理器的定义以及使用注解的业务逻辑。通过学习这个示例,我们可以更直观地理解Spring缓存的工作原理和实际...
在MyBatis的Mapper接口方法上使用Spring的Cache注解,实现查询结果的缓存。 8. **性能优化**: 使用Memcached需要注意缓存穿透、缓存雪崩和缓存击穿等问题。可以通过设置合理的过期时间、使用布隆过滤器防止穿透、...
【Spring Boot 使用 Spring Cache 缓存与数据落地到 Redis】\n\n在Spring Boot应用中,Spring Cache是一个强大的工具,可以极大地提升应用的性能,通过缓存非计算性或者昂贵的计算结果。Spring Cache抽象了缓存管理...
在本文中,我们将深入探讨如何使用Spring框架与Redis集成,以实现高效的缓存管理。Redis是一种内存中的数据结构存储系统,常被用作数据库、缓存和消息中间件。Spring框架提供了一种灵活且强大的方式来整合Redis,...
6. **JSR-107 支持**:从 Spring 4.1 开始,Spring Cache 添加了对 JSR-107(Java Caching API)标准的注解支持,使得开发者可以直接使用 JSR-107 提供的缓存注解,如 `@CacheResult`、`@CacheEvictAll` 等,增强了...