`
leiwuluan
  • 浏览: 693930 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

使用spring aop对web 应用数据进行memcached缓存

阅读更多

继续 上一章节[Memcached 入门-介绍-使用-优化 ]

 

http://leiwuluan.iteye.com/blog/1173402


一、 下面主要 实现spring aop 对web 应用数据 进行缓存存取。

 

说到aop 大家就会想到使用spring 的aop进行切面进行对web Action 的方法进行控制。

下图是实现的流程:

 

 


####

这边用到spring的两个类,简单介绍:

1、1 org.springframework.aop.framework.ProxyFactoryBean

 

spring 这个类可以代理目标类的所有方法

 

 




<bean id="surroundAdvice" class="com.memCached.service.aop.SurroundAdvice">

    <property name="memCachedClient" ref="memCachedClient" />

</bean>



<bean id="proxyFactory" abstract="true" class="org.springframework.aop.framework.ProxyFactoryBean">

    <property name="interceptorNames">

        <idref local="surroundAdvice" />

    </property>

    <property name="proxyTargetClass" value="true" />

</bean>



<bean id="studentRestService" parent="proxyFactory">

    <property name="target" ref="_studentRestService" />

</bean>



<bean id="_studentRestService" class="com.student.rest.service.impl.StudentServiceImpl">

    <property name="studentDao" ref="studentDao" />

</bean>

<bean id="studentDao" class="com.student.dao.impl.StudentDaoImpl" />





_studentRestService里面的所有方法将会被 surroundAdvice 给拦截。

 

 

spring 代理可以看看这位仁兄的:http://ajava.org/readbook/open/springrmdjt/15705.html

 

surroundAdvice 















implements MethodInterceptor 实现这个接口 重写invoke 方法

 

在这个方法里进行控制 如下,

 

@Override
	public Object invoke(MethodInvocation arg0) throws Throwable {

		String fname = arg0.getMethod().getName();
		String key = getKey(fname, arg0.getArguments());//方法名和参数组合成key
		StringBuffer sb = new StringBuffer();
		Object resultObj = null;
		
		if (memCachedClient != null) {
			if(MemcachedConf.CACHE_FLAG==MemcacheFlag.CLOSE_CACHE){
				memCachedClient.delete(key);
				sb.append(",不使用缓存");
				resultObj = arg0.proceed();
			}else{
				resultObj = memCachedClient.get(key);
				if(resultObj==null){
					resultObj = arg0.proceed();
					ResultDto s = (ResultDto)resultObj;
					if("success".equals(s.returncode)){
						sb.append(",数据存入缓存");
						memCachedClient.set(key, s, new Date(1000*60*60));
					}
				}else{
					sb.append(",缓存数据");
				}
			}
		}else{
			resultObj = arg0.proceed();
		}
		return resultObj;
	}
 

 

二、 一步一步 开始,从安装memcached 到web 搭建,运行,测试(有缓存与没有缓存的访问时间,测试)

 

2、1 安装 ,以windows下为例吧,linux下也是一样的简单。

        http://leiwuluan.iteye.com/blog/1172798     

 

 

 

2、2 web 搭建 ,数据库 :mysql,服务用 :rest,数据库操作 :Jdbc连接池

        下面工程,不多说。

       注意:ITeye最多10MB  只好把里面jar去了。

      可以到官网下jar  包.

 

     参考:

     http://leiwuluan.iteye.com/blog/1173402

      下个cxf:官方地址:http://cxf.apache.org/download.html

 

2、3 测试结果显示

 

无缓存处理时间:


 

---------------------------------------------------------------------------------------------

 

缓存数据处理时间:


 

待续...........................

 

 

 

 

 

 

 

  • 大小: 18.4 KB
  • 大小: 63.1 KB
  • 大小: 60.8 KB
2
3
分享到:
评论
1 楼 qq123zhz 2011-09-21  
如何处理脏数据。。。

相关推荐

    Simple-Spring-Memcached

    在JAVA中使用Memcached进行行缓存是比较复杂的。Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项来简化Memcached的使用。 该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使...

    simple-spring-memcached:一个通过注释在Spring Bean中启用Memcached缓存的嵌入式库

    一个通过注释在Spring bean中启用memcached缓存的嵌入式库。 大多数文档已移至github,但仍有一些文档仅在上可用。 介绍 当广泛使用分布式缓存时,它可能是一个庞大,繁琐,复杂而复杂的工作。 Simple Spring ...

    spring_mem_plugin:Spring的缓存插件,使用annotation方式和spring的aop编程让缓存业务更加方便和解耦,主要面向memcached

    顾名思义是基于spring和memcached的一个插件,该插件目前实现了memcached的查询缓存,利用java的annotation方式和spring的AOP切面编程使得我们在业务层获得缓存数据非常的方便 ##开始使用 首先你必须实现CacheSupport...

    memcached安装和使用详细说明

    memcached安装和使用详细说明 一、开启memcached服务器端服务 二、引入jar 三、创建memcached客户端配置文件 四、创建memcached客户端程序 五、使用Spring AOP在数据查询的Service层实现数据缓存及读取

    spring 实践学习案例

    - Spring 缓存,包括redis、ehcache、spring-cache、memcached、使用redis实现session共享 等。 - spring-docs - Spring 文档生成工具,包括 Swagger - spring-bussiness - Spring 业务应用,包括 AOP、过滤...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot 缓存,包括redis、ehcache、spring-cache、memcached、使用redis实现session共享 等。 - springboot-templates - Spring Boot 模板,包括thymeleaf、freemarker、jsp、表单校验 等。 - ...

    IOIF面向项目的开源开发框架

    实现的主要功能有:客户端Frame、客户端VAD、异常处理、错误处理、AOP日志管理、计划任务、操作日志管理、数据分页功能、线程池管理、内存缓存管理。主要工具有:系统日志工具、应用属性配置工具、系统属性配置工具...

    IOIF基于开源技术的JAVA开发框架

    实现的主要功能有:客户端Frame、客户端VAD、异常处理、错误处理、AOP日志管理、计划任务、操作日志管理、数据分页功能、线程池管理、内存缓存管理。主要工具有:系统日志工具、应用属性配置工具、系统属性配置工具...

    Java主流分布式解决方案多场景设计与实战-全新课程资料

    Tomcat+Mysql+设计模式+并发编程+JVM+Netty开源框架(SSM框架):Spring+SpringMVC+Mybatis微服务架构:Dubbo、SpringBoot、SprinGCloud、Docker分布式:分布式限流+分布式缓存+分布式通讯(限流:Nignx+Zookeeper/...

Global site tag (gtag.js) - Google Analytics