`

Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(3)-Spring整合

 
阅读更多

 

Memcached Java Client Spring整合

 

 

如果你的项目是使用Spring作为中间件的,那么Spring的整合配置是很有用的。

 

配置文件

applicationContext-memcachedjavaclient.xml

 

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ">  
    <!--memcached 客户端 SocketPool-->  
    <bean id="memcachedPool" class="com.danga.MemCached.SockIOPool" factory-method="getInstance" init-method="initialize" destroy-method="shutDown">    
        <constructor-arg><value>neeaMemcachedPool</value></constructor-arg>
        <property name="servers">  
            <list>  
                <value>localhost:11211</value>
                <value>localhost:11212</value>
                <value>localhost:11213</value>
            </list>  
        </property>  
        <!--多服务器负载均衡
        <property name="weights">  
            <value>1,1,1</value>  
        </property>-->  
        <property name="initConn">  
            <value>5</value>  
        </property>  
        <property name="minConn">  
            <value>5</value>  
        </property>  
        <property name="maxConn">  
            <value>250</value>  
        </property>  
        <property name="maintSleep">  
            <value>30</value>  
        </property>  
        <property name="nagle">  
            <value>false</value>  
        </property>  
        <property name="maxIdle">  
            <value>6000</value>  
        </property>  
        <property name="socketTO">  
            <value>3000</value>  
        </property>  
    </bean>  
      
    <!--memcached client-->  
    <bean id="memCachedClient" class="com.danga.MemCached.MemCachedClient">  
        <constructor-arg>  
            <value>neeaMemcachedPool</value>  
        </constructor-arg> 
    </bean>  
    <!--memcached 客户端***end-->  

    <!-- 业务系统缓存服务 -->
    <bean id="memcachedClientService" class="org.acooly.memcached.memcachedjavaclient.MemcachedClientServiceJavaClientImpl">
        <property name="memCachedClient" ref="memCachedClient" />
    </bean>
</beans>  

 业务代码

对原来直接使用JVM容器的代码进行微调,服务方法中修改调用单例获取memcached客户端实例为依赖Spring注入。

服务接口类:MemcachedClientService

/**
 * Memcached 常用功能接口定义,用于业务层直接使用,屏蔽各种客户端实现的API差异,实现解耦客户端与业务系统的目的
 * 无过期时间和flags支持,无append,prepend,replace,incr,decr等操作
 * 
 * @author zhangpu
 * 
 */
public interface MemcachedClientService {

	String get(String key);

	CacheItem gets(String key);

	boolean add(String key, String value);

	boolean set(String key, String value);

	boolean cas(String key, String value, long unique);
	
	boolean delete(String key);

	boolean flushAll();

}

 

服务实现类:MemcachedClientServiceJavaClientImpl

/**
 * Memcached for java 客户端缓存服务实现 (SPING)
 * 
 * @author zhangpu
 * 
 */
public class MemcachedClientServiceJavaClientImpl implements MemcachedClientService {

	/** 客户端实现注入 */
	private MemCachedClient memCachedClient;

	public void setMemCachedClient(MemCachedClient memCachedClient) {
		this.memCachedClient = memCachedClient;
	}

	public boolean add(String key, String value) {
		return memCachedClient.add(key, value);
	}

	public boolean cas(String key, String value, long unique) {
		return memCachedClient.cas(key, value, unique);
	}

	public String get(String key) {
		return (String) memCachedClient.get(key);
	}

	public CacheItem gets(String key) {
		MemcachedItem item = memCachedClient.gets(key);
		return new CacheItem(key, (String) item.getValue(), item.getCasUnique());
	}

	public boolean set(String key, String value) {
		return memCachedClient.set(key, value);
	}

	public boolean delete(String key) {
		return memCachedClient.delete(key);
	}

	public boolean flushAll() {
		return memCachedClient.flushAll();
	}

}

 

代码验证

public class MemcachedClientSerivceSpringTest {

	public static void main(String[] args) throws Exception {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "applicationContext-memcachedjavaclient.xml" });
		
		MemcachedClientService memcachedClientService = (MemcachedClientService) context
				.getBean("memcachedClientService");
		
		String key = "keySpring";
		String value = "i like Spring.";
		String newValue = "i love Spring";
		System.out.println("add: " + memcachedClientService.add(key, value));
		System.out.println("set: " + memcachedClientService.set(key, newValue));
		System.out.println("get: " + memcachedClientService.get(key));
		CacheItem item = memcachedClientService.gets(key);
		System.out.println("gets: " + item);
		System.out.println("cas: " + memcachedClientService.cas(key, newValue, item.getUnique()));
		System.out.println("del: " + memcachedClientService.delete(key));
	}

}

 

 执行结果:

 

add: true
set: true
get: i love Spring
gets: {key:keySpring,value:i love Spring,unique:2701285}
cas: true
del: true

 配置问题

配置文件中,我注释了权重配置,是因为SocketPool中的权重参数是Integer[],我没有想到办法怎么在Spring配置中注入Integer[]参数,以前都是自己的代码,可以转换为字符串跳过此问题了。

 

<property name="weights">  
      <value>1,1,1</value>  
</property>
 

解决办法:

  • 扩展Spring的配置实现,Spring提供了相关扩展方法,支持自定义参数配置。
  • 下载memcached java client的源代码,修改下SocketPool的实现。

 

分享到:
评论
3 楼 飞天奔月 2012-03-27  
晚上回来继续拜读你的文章

对于你,没有想到办法怎么在Spring配置中注入Integer[]参数

我来贡献点配置


		<!--多服务器负载均衡 -->
		<property name="weights">
			<list>
				<value>5</value>
				<!-- <value>5</value> -->
			</list>
		</property>

2 楼 飞天奔月 2012-03-26  
不得不说  你对memcached理解的很透彻  学习
1 楼 sun78410683 2011-07-20  
请教个问题:如何将memcached所管理的内存中数据保存到数据库中?  memcached是否提供这个机制 还是需要我们写方法自己实现? 谢谢

相关推荐

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    Memcached是一种广泛使用的分布式内存缓存系统,它能够...通过这篇学习笔记,你应该对gwhalin Memcached Java客户端有了初步了解,接下来可以结合实际项目,深入学习和实践,充分发挥Memcached在高并发场景下的优势。

    Java架构面试专题汇总(含答案)和学习笔记.zip

    以上只是Java架构面试中可能涉及的部分核心知识点,实际的压缩包文件可能还包括更多具体的面试题目、解答以及深度学习笔记,对于准备Java架构师职位的求职者来说,这些都是宝贵的参考资料。通过系统学习并实践这些...

    Java架构面试专题(含答案)和学习笔记(5).rar

    以上只是Java架构面试中部分可能涉及的知识点,具体的学习笔记和答案会更加详细地解释每个概念,提供实践案例和解决思路,帮助读者巩固理论知识并提升实战技能。对于希望在Java架构领域深造的开发者来说,这是一个...

    《java学习》-SSM实战项目-Java高并发秒杀API,详细流程+学习笔记.zip

    在Java学习的过程中,SSM(Spring、SpringMVC、MyBatis)框架的实战项目是不可或缺的一部分,尤其在实现高并发场景下的秒杀API时,更需要深入理解这些技术的运用。本项目提供了详细的流程说明和学习笔记,帮助开发者...

    Java架构面试专题(含答案)和学习笔记

    Java架构面试专题涵盖了Java开发语言的核心知识、高级特性、并发编程、内存管理、垃圾收集、JVM优化、设计模式、框架应用、数据库交互、微服务架构等多个方面,这些都是面试中常被问到的关键点。本专题旨在帮助Java...

    Java核心知识点记录学习

    在“Java-Summarize-code”这个压缩包中,可能包含了对以上知识点的代码示例和学习笔记,通过阅读和实践,可以进一步巩固和深化Java核心技术的理解。无论是初学者还是经验丰富的开发者,持续学习和实践这些知识点都...

    Java架构面试笔试专题资料及经验(含答案)和学习笔记.zip

    Java架构面试笔试专题资料及经验(含答案)和学习笔记: ActiveMQ消息中间件面试专题.pdf Dubbo面试专题及答案(下).pdf Dubbo面试及答案(上).pdf java后端面试题答案.pdf Java基础面试题.pdf java多线程并发编程...

    java后端面试题(按天复习).zip

    Java后端面试题是每一位Java开发者在求职过程中都需要面对的重要环节。这些题目涵盖了广泛的Java基础知识、框架、设计模式以及系统架构等多方面的内容。通过每天的复习,可以帮助开发者巩固技术,提升面试表现。以下...

    最全的Java程序员知识(专业知识+面试+视频教程)学习资料合集.zip

    Java架构面试专题及架构学习笔记 Dubbo服务框架面试专题及答案整理文档 BAT面试常问80题 23种设计模式知识要点整理 面试必备—API接口安全 面试必备—服务器推送技术 面试必备—匠心独运手写MyBatis框架 面试必备—...

    SSM实战项目——Java高并发秒杀API,详细流程+学习笔记

    SSM实战项目——Java高并发秒杀API是一个深入学习Java后端开发的重要实践,它涵盖了Spring、SpringMVC和MyBatis三大框架的整合应用,以及如何处理高并发下的秒杀场景。在这个项目中,我们将深入理解如何设计并实现一...

    Java笔记,从基础到进阶到源码分析,包括但不限于SSM,SpringBoot,SpringCloud,中间件.zip

    这份名为“Java笔记,从基础到进阶到源码分析,包括但不限于SSM,SpringBoot,SpringCloud,中间件”的压缩包文件,显然是一个全面学习Java技术体系的宝贵资源。我们将详细探讨其中涵盖的关键知识点。 首先,基础...

    Java_Architect_Notes-Balaji.rar_java architect

    【Java架构师笔记-Balaji】是一份专为准备Java架构师认证考试的学习资源,它由知名讲师Balaji编撰,旨在帮助考生深入理解和掌握Java架构设计的核心概念和技术。这份资料可能涵盖了广泛的Java技术和架构原则,是提升...

    ImagesForGulimall-商城笔记图片

    6. **支付集成**:如支付宝、微信支付等第三方支付接口的集成是商城系统不可或缺的部分,涉及API调用、回调处理等技术。 7. **购物车和订单系统**:购物车逻辑处理商品的添加、删除、修改数量,而订单系统负责订单...

    Java最全的架构笔记(共六百多页).zip

    这份名为“Java最全的架构笔记(共六百多页).zip”的压缩包文件,显然是一个详尽的Java架构学习资源,包含了多个专题系列,旨在帮助开发者深入理解和掌握Java技术栈及其在大规模系统中的应用。以下是根据描述中提到...

    Java_Architect_Notes-John_H.rar_architect_java architect

    【Java架构师笔记——John_H】是一份针对Java架构师认证考试的重要学习资源,由知名专家John H提供。这份资料全面覆盖了Java架构设计的核心概念和技术,旨在帮助备考者深入理解并掌握成为一名合格的Java架构师所需的...

    redis 的学习笔记A

    Java开发者还可以选择Jedis或Lettuce等客户端库来连接和操作Redis。 5. Redis的集群和高可用性 Redis支持主从复制,通过复制实现数据备份和故障切换。同时,Redis Cluster提供了一个分布式解决方案,允许数据在多...

    alpha注释:Java工程师知识图

    "alpha注释:Java工程师知识图"是一个涵盖了Java开发领域多方面知识的综合资源,旨在帮助Java工程师构建全面的技术体系。这个思维导图包含了以下几个主要部分: 1. **Java语言**: - 基础语法:变量、数据类型、...

    乐优商城笔记.zip

    2. **Spring MVC**:作为Spring Boot的一部分,Spring MVC是用于构建Web应用程序的模型-视图-控制器(MVC)框架。它提供了一种组织代码结构的方式,便于处理HTTP请求和响应,以及业务逻辑与视图层的分离。 3. **...

    03 源码框架专题04.zip

    【描述】虽然描述信息较为简略,但可以推测该压缩包可能包含两部分教程或笔记,即"Spring Boot快速集成第三方技术详解(1).vep"和"Spring Boot快速集成第三方技术详解(2).vep"。这两份文件很可能提供了详细的步骤...

    面试专题课堂笔记.zip

    【Java面试专题笔记】是针对Java开发者准备的面试学习资料,涵盖了多个关键领域的知识点,旨在帮助应聘者在面试中展现出全面的技术能力。这份压缩包包含了十一个子文件,每个文件都对应一个特定的主题,让我们逐一...

Global site tag (gtag.js) - Google Analytics