Memcached笔记——(二)XMemcached&Spring集成
今天研究Memcached的Java的Client,使用XMemcached 1.3.5,做个简单的测试,并介绍如何与Spring集成。
一、Memcached Client简要介绍
Memcached Client目前有3种:
Memcached Client for Java
SpyMemcached
XMemcached
这三种Client一直存在各种争议:
Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛;
SpyMemcached 比 Memcached Client for Java更高效;
XMemcached 比 SpyMemcache并发效果更好。
用数据来说话,参考官方性能对比:
Memcached Client for Java:https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE
XMemcached:http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html
二、XMemcached特性
XMemcached特性:
高性能支持完整的memcached文本协议,二进制协议。支持JMX,可以通过MBean调整性能参数、动态添加/移除server、查看统计等。支持客户端统计支持memcached节点的动态增减。支持memcached分布:余数分布和一致性哈希分布。更多的性能调整选项。
此外,XMemcached更容易与Spring集成。而且,属于中国原创!
三、XMemcached简单实现
MemcachedClientBuilder是MemcachedClient核心接口,用来控制Client的构建(build()方法)和关闭(shutdown()方法)。
XMemcachedClientBuilder一般通过构造方法配置地址列表,通常还要配置权重,代码如下:
这里的memcachedClientBuilder节点完成MemcachedClientBuilder,然后通过memcachedClient节点配置factory-method,调用MemcachedClientBuilder的build()方法产生MemcachedClient,并配置destroy-method进行关闭。
不过我还是疑惑,这里的异常由谁来处理?Spring容器吗? 或者需要另一个代理Bean包装一下?
有了Spring容器支持,我们不需要在代码中进行配置,也不需要重复调用build()跟shutdown()方法,这些操作交给Spring来完成。
代码如下:import static junit.framework.Assert.*;import java.util.concurrent.TimeoutException;import net.rubyeye.xmemcached.MemcachedClient;import net.rubyeye.xmemcached.exception.MemcachedException;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MemcachedSpringTest {private ApplicationContext app;private MemcachedClient memcachedClient;@Beforepublic void init() {app = new ClassPathXmlApplicationContext("applicationContext.xml");memcachedClient = (MemcachedClient) app.getBean("memcachedClient");}@Testpublic void test() {try {// 设置/获取memcachedClient.set("zlex", 36000, "set/get");assertEquals("set/get", memcachedClient.get("zlex"));// 替换memcachedClient.replace("zlex", 36000, "replace");assertEquals("replace", memcachedClient.get("zlex"));// 移除memcachedClient.delete("zlex");assertNull(memcachedClient.get("zlex"));} catch (TimeoutException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MemcachedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
先写到这里,感觉还差点什么,再整理!
相关链接:
Memcached笔记——(一)安装&常规错误&监控
XMemcached User Guide