- 浏览: 160433 次
- 性别:
- 来自: 西安
文章分类
最新评论
spring3 自带 cache 整合之方法缓存
博客分类: spring
最近项目刚好用的spring版本是Spring3.1.M1 ,好像 spring3就开始有了对缓存的整合。其实底层的实现也就是上篇文件一样。http://m635674608.iteye.com/admin/blogs/1678983
spring3.1.M1中负责cache的模块是org.springframework.context-3.1.0.M1.jar
与2.5时的modules模块类似,3.1的注解缓存也是在方法上声明注解,3.1同样提供了两个注解:
@Cacheable:负责将方法的返回值加入到缓存中
@CacheEvict:负责清除缓存
@Cacheable 支持如下几个参数:
value:缓存位置名称,不能为空,如果使用EHCache,就是ehcache.xml中声明的cache的name
key:缓存的key,默认为空,既表示使用方法的参数类型及参数值作为key,支持SpEL
condition:触发条件,只有满足条件的情况才会加入缓存,默认为空,既表示全部都加入缓存,支持SpEL
1 //将缓存保存进andCache,并使用参数中的userId加上一个字符串(这里使用方法名称)作为缓存的key
2 @Cacheable(value="andCache",key="#userId + 'findById'")
3 public SystemUser findById(String userId) {
4 SystemUser user = (SystemUser) dao.findById(SystemUser.class, userId);
5 return user ;
6 }
7 //将缓存保存进andCache,并当参数userId的长度小于32时才保存进缓存,默认使用参数值及类型作为缓存的key
8 @Cacheable(value="andCache",condition="#userId.length < 32")
9 public boolean isReserved(String userId) {
10 System.out.println("hello andCache"+userId);
11 return false;
12 }
@CacheEvict 支持如下几个参数:
value:缓存位置名称,不能为空,同上
key:缓存的key,默认为空,同上
condition:触发条件,只有满足条件的情况才会清除缓存,默认为空,支持SpEL
allEntries:true表示清除value中的全部缓存,默认为false
//清除掉指定key的缓存
@CacheEvict(value="andCache",key="#user.userId + 'findById'")
public void EvictUserRole(SystemUser user) {
System.out.println("hello andCache delete"+user.getUserId());
}
//清除掉全部缓存
@CacheEvict(value="andCache",allEntries=true)
public final void EvictUsers(String[] reservedUsers) {
System.out.println("hello andCache deleteall");
}
Spring3集成了ehcache缓存。
第一步:配置Spring文件,声明支持缓存和支持注解
13 <?xml version="1.0" encoding="UTF-8"?>
14 <beans xmlns="http://www.springframework.org/schema/beans"
15 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
16 xmlns:cache="http://www.springframework.org/schema/cache"
17 xsi:schemaLocation="
18 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
19 http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
20
21 <!-- 缓存注解声明,使用注解缓存 -->
22 <cache:annotation-driven cache-manager="cacheManager" />
23
24 <!-- 指定ehcache.xml的位置 -->
25 <bean id="cacheManagerFactory"
26 class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
27 p:configLocation="classpath:/ehcache.xml" />
28
29 <!-- 声明缓存Manager -->
30 <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
31 p:cacheManager-ref="cacheManagerFactory" />
32
33 </beans>
第二步:配置Ehcache文件,定义缓存的具体策略。
34
35
36 <?xml version="1.0" encoding="UTF-8"?>
37
38
39
40
41
42 <ehcache>
43
44
45 <diskStore path="java.io.tmpdir" />
46
47
48 <defaultCache maxElementsInMemory="500" eternal="false"
49
50
51 timeToIdleSeconds="300" timeToLiveSeconds="1200" overflowToDisk="true" />
52
53
54 <cache name="DEFAULT_CACHE" maxElementsInMemory="5000" eternal="false"
55
56
57 timeToIdleSeconds="500" timeToLiveSeconds="500" overflowToDisk="true" />
58
59
60 </ehcache>
61
62
第三步:写一个使用缓存的测试方法:
63 import org.springframework.cache.annotation.Cacheable;
64 //将缓存保存进DEFAULT_CACHE,并使用参数中的userId加上一个字符串(这里使用方法名称)作为缓存的key
65 @Cacheable(value="DEFAULT_CACHE",key="#userId + 'findById'")
66 public SystemUser findById(String userId) {
67 SystemUser user = (SystemUser) dao.findById(SystemUser.class, userId);
68 return user ;
69 }
70
在这里,value = “”,对应了ehcache中的缓存名。
这种写法spring的缓存框架是根据传入进去的参数来判断查找缓存的,比如这里的param等于“admin”,缓存后,spring在从ehcache查“admin” 从缓存中取了。
如果你想更自主的控制缓存查找,可以使用key参数。
key使用SPEL语言(Spring开发的类似于jsp中的EL表达式的语言)。Key的默认生成如下:
1. 不提供参数,返回0
2. 只提供一个参数,直接返回该参数
3. 提供多个参数,则返回多个参数进行hash运算之后的结果。
总结:其实spring3的这个cache底层的实现就是和这里一样http://m635674608.iteye.com/admin/blogs/1678983
只是spring帮我们封装好了。当然spring封装的还是比较好的。
<!--EndFragment-->
博客分类: spring
最近项目刚好用的spring版本是Spring3.1.M1 ,好像 spring3就开始有了对缓存的整合。其实底层的实现也就是上篇文件一样。http://m635674608.iteye.com/admin/blogs/1678983
spring3.1.M1中负责cache的模块是org.springframework.context-3.1.0.M1.jar
与2.5时的modules模块类似,3.1的注解缓存也是在方法上声明注解,3.1同样提供了两个注解:
@Cacheable:负责将方法的返回值加入到缓存中
@CacheEvict:负责清除缓存
@Cacheable 支持如下几个参数:
value:缓存位置名称,不能为空,如果使用EHCache,就是ehcache.xml中声明的cache的name
key:缓存的key,默认为空,既表示使用方法的参数类型及参数值作为key,支持SpEL
condition:触发条件,只有满足条件的情况才会加入缓存,默认为空,既表示全部都加入缓存,支持SpEL
1 //将缓存保存进andCache,并使用参数中的userId加上一个字符串(这里使用方法名称)作为缓存的key
2 @Cacheable(value="andCache",key="#userId + 'findById'")
3 public SystemUser findById(String userId) {
4 SystemUser user = (SystemUser) dao.findById(SystemUser.class, userId);
5 return user ;
6 }
7 //将缓存保存进andCache,并当参数userId的长度小于32时才保存进缓存,默认使用参数值及类型作为缓存的key
8 @Cacheable(value="andCache",condition="#userId.length < 32")
9 public boolean isReserved(String userId) {
10 System.out.println("hello andCache"+userId);
11 return false;
12 }
@CacheEvict 支持如下几个参数:
value:缓存位置名称,不能为空,同上
key:缓存的key,默认为空,同上
condition:触发条件,只有满足条件的情况才会清除缓存,默认为空,支持SpEL
allEntries:true表示清除value中的全部缓存,默认为false
//清除掉指定key的缓存
@CacheEvict(value="andCache",key="#user.userId + 'findById'")
public void EvictUserRole(SystemUser user) {
System.out.println("hello andCache delete"+user.getUserId());
}
//清除掉全部缓存
@CacheEvict(value="andCache",allEntries=true)
public final void EvictUsers(String[] reservedUsers) {
System.out.println("hello andCache deleteall");
}
Spring3集成了ehcache缓存。
第一步:配置Spring文件,声明支持缓存和支持注解
13 <?xml version="1.0" encoding="UTF-8"?>
14 <beans xmlns="http://www.springframework.org/schema/beans"
15 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
16 xmlns:cache="http://www.springframework.org/schema/cache"
17 xsi:schemaLocation="
18 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
19 http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
20
21 <!-- 缓存注解声明,使用注解缓存 -->
22 <cache:annotation-driven cache-manager="cacheManager" />
23
24 <!-- 指定ehcache.xml的位置 -->
25 <bean id="cacheManagerFactory"
26 class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
27 p:configLocation="classpath:/ehcache.xml" />
28
29 <!-- 声明缓存Manager -->
30 <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
31 p:cacheManager-ref="cacheManagerFactory" />
32
33 </beans>
第二步:配置Ehcache文件,定义缓存的具体策略。
34
35
36 <?xml version="1.0" encoding="UTF-8"?>
37
38
39
40
41
42 <ehcache>
43
44
45 <diskStore path="java.io.tmpdir" />
46
47
48 <defaultCache maxElementsInMemory="500" eternal="false"
49
50
51 timeToIdleSeconds="300" timeToLiveSeconds="1200" overflowToDisk="true" />
52
53
54 <cache name="DEFAULT_CACHE" maxElementsInMemory="5000" eternal="false"
55
56
57 timeToIdleSeconds="500" timeToLiveSeconds="500" overflowToDisk="true" />
58
59
60 </ehcache>
61
62
第三步:写一个使用缓存的测试方法:
63 import org.springframework.cache.annotation.Cacheable;
64 //将缓存保存进DEFAULT_CACHE,并使用参数中的userId加上一个字符串(这里使用方法名称)作为缓存的key
65 @Cacheable(value="DEFAULT_CACHE",key="#userId + 'findById'")
66 public SystemUser findById(String userId) {
67 SystemUser user = (SystemUser) dao.findById(SystemUser.class, userId);
68 return user ;
69 }
70
在这里,value = “”,对应了ehcache中的缓存名。
这种写法spring的缓存框架是根据传入进去的参数来判断查找缓存的,比如这里的param等于“admin”,缓存后,spring在从ehcache查“admin” 从缓存中取了。
如果你想更自主的控制缓存查找,可以使用key参数。
key使用SPEL语言(Spring开发的类似于jsp中的EL表达式的语言)。Key的默认生成如下:
1. 不提供参数,返回0
2. 只提供一个参数,直接返回该参数
3. 提供多个参数,则返回多个参数进行hash运算之后的结果。
总结:其实spring3的这个cache底层的实现就是和这里一样http://m635674608.iteye.com/admin/blogs/1678983
只是spring帮我们封装好了。当然spring封装的还是比较好的。
<!--EndFragment-->
发表评论
-
mock request
2017-08-20 02:56 0一:postprotected ApplicationCont ... -
使用mockMvc测试文件上传
2017-08-20 01:52 6355@Autowired BanksController bank ... -
spring mvc 初始化加载bean
2016-06-15 20:28 1373<context:component-scan bas ... -
RestTemplate实践
2016-06-11 00:30 941什么是RestTemplate? RestTemplat ... -
@Component(“”)和@resource(name=””)的使用:
2016-06-08 01:24 12252@Component(“”)和@resource(nam ... -
springboot 使用外部tomcat启动
2016-06-05 22:59 1548package sample.xml; import o ... -
spring @requestbody所需jar包
2016-05-01 00:33 673spring @requestbody所需jar包 -
spring mvc配置@requestbody
2016-05-01 00:26 988<?xml version="1.0" ... -
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
2016-04-25 23:29 3868今天给大家介绍一款工具,这个工具目前可预见的好处是:自动维护 ... -
Java开发Web Service客户端技巧:wsimport、jaxws-maven-plugin、整合Spring
2015-12-02 20:47 1007搭建一个简单的Web Serv ... -
zzzzzzzzzzzzzz
2015-10-31 01:30 0在版本升级的过程中,承担模块基本功能验证的任务,在时间紧任务急 ... -
spring 线程池
2015-10-17 01:13 0spring 线程池 -
eee
2014-04-29 21:26 0少壮不努力,长大玩手机。 春眠不觉晓,醒来玩手机。 举头望明月 ... -
spring mvc demo
2013-03-17 21:19 0XiaoV's Blog 也许, 这只是一个梦。。 2010- ... -
spring-mvc
2013-03-04 22:23 741收藏该经验 现在主流的Web MVC框架除了S ...
相关推荐
Spring Cache提供了基于注解的缓存支持,允许开发者在方法级别声明缓存行为。通过在方法上使用`@Cacheable`、`@CacheEvict`和`@Caching`等注解,可以轻松地控制缓存的存取和清除。 1. **@Cacheable**:这个注解用于...
SpringCache与Redis集成,优雅的缓存解决方案 SpringCache是一种基于Java的缓存解决方案,它可以与Redis集成,提供了一种优雅的缓存解决方案。在本文中,我们将对SpringCache与Redis集成的优雅缓存解决方案进行详细...
本示例将聚焦于“Spring简单的缓存”实现,帮助开发者了解如何在Spring框架中集成和使用缓存功能。 Spring框架提供了强大的缓存抽象,支持多种缓存机制,如 EhCache、Redis、Hazelcast 和 Infinispan 等。在Spring...
JAVA编程之spring cache本机缓存应用 spring cache简单实用,简介: 1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和...
在IT行业中,Spring框架是Java领域最广泛应用的轻量级框架之一,它为开发者提供了强大的依赖注入(DI)和面向切面编程(AOP)功能。Ehcache则是一款广泛使用的开源缓存解决方案,用于提高应用程序性能,减少数据库...
Cache接口是Spring Cache的核心接口之一,提供缓存的具体操作,如缓存的放入、读取、清理。Cache接口的方法包括getName、getNativeCache、get、get(Object key, Class<T> type)、put、evict等。 Spring Boot+Spring...
【Spring Boot 使用 Spring Cache 缓存与数据落地到 Redis】\n\n在Spring Boot应用中,Spring Cache是一个强大的工具,可以极大地提升应用的性能,通过缓存非计算性或者昂贵的计算结果。Spring Cache抽象了缓存管理...
在Spring Boot应用中,Spring Cache是一个强大的工具,用于在应用程序中实现缓存抽象,它可以减少对数据库或远程服务的重复调用,从而提高性能。在本篇文档中,我们将探讨如何使用Spring Cache来缓存数据,并结合...
3. **配置Spring整合Hibernate**:在Spring的配置文件(如applicationContext.xml)中,我们需要配置Hibernate SessionFactory,并指定缓存相关的bean。例如: ```xml <bean id="sessionFactory" class="org....
3. **启用Spring Cache**:在Spring Boot的配置类上添加`@EnableCaching`注解,开启缓存功能。 4. **配置Redis Cache Manager**:创建一个配置类,定义RedisCacheManager并设置相关属性,如过期时间、序列化策略等...
在本项目中,我们主要探讨的是如何将Spring Cache与memcached...通过这样的整合,我们可以充分利用Spring Cache的便捷性和memcached的高性能,为应用程序构建一个强大的缓存层,有效提升服务的响应速度和并发处理能力。
在本文中,我们将深入探讨如何在Spring Boot 1.x版本中使用Spring注解来实现J2Cache的两级缓存机制,其中包括一级缓存Ehcache和二级缓存Redis。通过这种方式,我们可以显著提高应用程序的性能,减少对数据库的依赖,...
在SSM框架中引入Memcached并基于Spring的Cache注解进行整合,可以实现高效、分布式的数据缓存,提升系统性能。下面将详细阐述这一过程中的关键知识点。 1. **Memcached介绍**: Memcached是一款高性能、分布式的...
在Spring框架中整合Ehcache,可以实现页面和对象级别的缓存管理,从而优化Web应用的响应速度。下面将详细介绍Ehcache与Spring的整合及其在页面和对象缓存中的应用。 一、Ehcache简介 Ehcache是基于内存的分布式缓存...
- Spring Cache 提供了一种声明式的方式来添加缓存支持,通过注解如`@Cacheable`、`@CacheEvict`和`@CachePut`,可以在方法级别声明缓存行为。 - 缓存管理器(CacheManager)是Spring Cache的核心,负责创建和管理...
3. **缓存键生成**:默认情况下,Spring 使用所有方法参数的哈希值作为缓存键。但是,我们可以自定义键生成策略,通过 `keyGenerator` 属性指定自定义的 KeyGenerator 类,或者使用 SpEL(Spring Expression ...
通过上述步骤,我们可以成功地在Spring Boot项目中整合Spring Cache与Redis,实现了一个高效的分布式缓存解决方案。这种方式不仅可以提高系统的响应速度,还可以有效减轻数据库的压力,对于构建高并发、高可用的应用...
在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存是个不错的选择,因此本文将介绍如何在Spring Boot的缓存支持中使用Redis进行数据缓存...
3. `@CachePut`:这个注解会执行方法并更新缓存,即使缓存中已有相同键的数据。 ```java @CachePut(value = "myCache", key = "#result.id") public MyEntity update(MyEntity entity) { // 更新数据库中的对象 ...