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的实现。
分享到:
相关推荐
Memcached是一种广泛使用的分布式内存缓存系统,它能够...通过这篇学习笔记,你应该对gwhalin Memcached Java客户端有了初步了解,接下来可以结合实际项目,深入学习和实践,充分发挥Memcached在高并发场景下的优势。
以上只是Java架构面试中可能涉及的部分核心知识点,实际的压缩包文件可能还包括更多具体的面试题目、解答以及深度学习笔记,对于准备Java架构师职位的求职者来说,这些都是宝贵的参考资料。通过系统学习并实践这些...
以上只是Java架构面试中部分可能涉及的知识点,具体的学习笔记和答案会更加详细地解释每个概念,提供实践案例和解决思路,帮助读者巩固理论知识并提升实战技能。对于希望在Java架构领域深造的开发者来说,这是一个...
在Java学习的过程中,SSM(Spring、SpringMVC、MyBatis)框架的实战项目是不可或缺的一部分,尤其在实现高并发场景下的秒杀API时,更需要深入理解这些技术的运用。本项目提供了详细的流程说明和学习笔记,帮助开发者...
Java架构面试专题涵盖了Java开发语言的核心知识、高级特性、并发编程、内存管理、垃圾收集、JVM优化、设计模式、框架应用、数据库交互、微服务架构等多个方面,这些都是面试中常被问到的关键点。本专题旨在帮助Java...
在“Java-Summarize-code”这个压缩包中,可能包含了对以上知识点的代码示例和学习笔记,通过阅读和实践,可以进一步巩固和深化Java核心技术的理解。无论是初学者还是经验丰富的开发者,持续学习和实践这些知识点都...
Java架构面试笔试专题资料及经验(含答案)和学习笔记: ActiveMQ消息中间件面试专题.pdf Dubbo面试专题及答案(下).pdf Dubbo面试及答案(上).pdf java后端面试题答案.pdf Java基础面试题.pdf java多线程并发编程...
Java后端面试题是每一位Java开发者在求职过程中都需要面对的重要环节。这些题目涵盖了广泛的Java基础知识、框架、设计模式以及系统架构等多方面的内容。通过每天的复习,可以帮助开发者巩固技术,提升面试表现。以下...
Java架构面试专题及架构学习笔记 Dubbo服务框架面试专题及答案整理文档 BAT面试常问80题 23种设计模式知识要点整理 面试必备—API接口安全 面试必备—服务器推送技术 面试必备—匠心独运手写MyBatis框架 面试必备—...
SSM实战项目——Java高并发秒杀API是一个深入学习Java后端开发的重要实践,它涵盖了Spring、SpringMVC和MyBatis三大框架的整合应用,以及如何处理高并发下的秒杀场景。在这个项目中,我们将深入理解如何设计并实现一...
这份名为“Java笔记,从基础到进阶到源码分析,包括但不限于SSM,SpringBoot,SpringCloud,中间件”的压缩包文件,显然是一个全面学习Java技术体系的宝贵资源。我们将详细探讨其中涵盖的关键知识点。 首先,基础...
【Java架构师笔记-Balaji】是一份专为准备Java架构师认证考试的学习资源,它由知名讲师Balaji编撰,旨在帮助考生深入理解和掌握Java架构设计的核心概念和技术。这份资料可能涵盖了广泛的Java技术和架构原则,是提升...
6. **支付集成**:如支付宝、微信支付等第三方支付接口的集成是商城系统不可或缺的部分,涉及API调用、回调处理等技术。 7. **购物车和订单系统**:购物车逻辑处理商品的添加、删除、修改数量,而订单系统负责订单...
这份名为“Java最全的架构笔记(共六百多页).zip”的压缩包文件,显然是一个详尽的Java架构学习资源,包含了多个专题系列,旨在帮助开发者深入理解和掌握Java技术栈及其在大规模系统中的应用。以下是根据描述中提到...
【Java架构师笔记——John_H】是一份针对Java架构师认证考试的重要学习资源,由知名专家John H提供。这份资料全面覆盖了Java架构设计的核心概念和技术,旨在帮助备考者深入理解并掌握成为一名合格的Java架构师所需的...
Java开发者还可以选择Jedis或Lettuce等客户端库来连接和操作Redis。 5. Redis的集群和高可用性 Redis支持主从复制,通过复制实现数据备份和故障切换。同时,Redis Cluster提供了一个分布式解决方案,允许数据在多...
"alpha注释:Java工程师知识图"是一个涵盖了Java开发领域多方面知识的综合资源,旨在帮助Java工程师构建全面的技术体系。这个思维导图包含了以下几个主要部分: 1. **Java语言**: - 基础语法:变量、数据类型、...
2. **Spring MVC**:作为Spring Boot的一部分,Spring MVC是用于构建Web应用程序的模型-视图-控制器(MVC)框架。它提供了一种组织代码结构的方式,便于处理HTTP请求和响应,以及业务逻辑与视图层的分离。 3. **...
【描述】虽然描述信息较为简略,但可以推测该压缩包可能包含两部分教程或笔记,即"Spring Boot快速集成第三方技术详解(1).vep"和"Spring Boot快速集成第三方技术详解(2).vep"。这两份文件很可能提供了详细的步骤...
【Java面试专题笔记】是针对Java开发者准备的面试学习资料,涵盖了多个关键领域的知识点,旨在帮助应聘者在面试中展现出全面的技术能力。这份压缩包包含了十一个子文件,每个文件都对应一个特定的主题,让我们逐一...