github上的Java-Memcached-Client 已经很久没有更新了。没多少人用了吧?可惜。。。
所以得研究一下现状。
有两个出处文章,分别做了对比,结论是这个client是不能用了。
============================================================================= ===
测试源码:
- svn co http://xmemcached.googlecode.com/svn/trunk/benchmark/
测试结果:
- svn co http://xmemcached.googlecode.com/svn/trunk/benchmark/result
总结下测试结果,为还在选择和考察java memcached client的朋友提供参考:
1、Java-Memcached-Client 2.5.1这个版本果然有很大改进,性能上有非常大的提升,从测试结果来看在小于100并发下有非常明显的优势,同时耗费资源也相对较多。但是在300并 发访问下,Java-Memcached-Client会不断地报错:
- com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for: 10.232.36.82:12000
- com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for: 10.232.36.82:12000
- com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for: 10.232.36.90:12000
- com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for: 10.232.36.82:12000
- com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for: 10.232.36.90:12000
- com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for: 10.232.36.82:12000
并且无法正常地存取数据,而xmc和spy却可以正常应对这一场景。因此可以看到在300并发下,Java-Memcached-Client测试的结果直接为0,因为测试无法完成。尽管我尝试将最大连接数调整到2000,仍然是无法正常完成测试。
2、Xmemcached无论在低并发还是高并发访问的情况下,都可以保持一个比较优秀的性能表现,从xmc和spy的对比来看,xmc的优势相当大。
3、从用户选择角度来说,如果你的应用对memached的访问负载并不高,Java-Memcached-Client是一个不错的选择,但是在高峰访问的时候可能命中率会有个急剧的波动;如果你的应用访问memached的负载较高,此时我推荐你选择xmemcached;如果你需要异步的批量处理(future模式),可以选择spymemcached;如果你不知道你的应用是什么状况,我推荐你用xmemcached,可以在任何情况下获得一个比较好的性能表现。
原文地址:转Java 几个memcached 连接客户端对比 选择作者:闪出光芒
=============================================================================
几个Memcached Java Client性能对比
对比spymemcached和Memcached-Java-Client性能
在http://code.google.com/p/memcached/wiki/Clients 上主要有两个Java版本的Memcached客户端,原文如下:
spymemcached
-
http://code.google.com/p/spymemcached
- An improved Java API maintained by Dustin Sallings.
- Aggressively optimised, ability to run async, supports binary protocol, etc. See site for details.
Java memcached client
-
http://www.whalin.com/memcached
- A Java API is maintained by Greg Whalin from Meetup.com.
在个人电脑上写了一段程序对比两个客户端的效率(单一memcached服务器),
用100个线程,分别插入后查询1000笔数据,spymemcached耗时约8s
对spymemcached测试如下:
- import java.io.IOException;
- import net.spy.memcached.AddrUtil;
- import net.spy.memcached.MemcachedClient;
- public class TestSpymemcached extends Thread{
- /**
- * @param args
- */
- private int count;
- public static void main(String[] args) throws Exception{
- // TODO Auto-generated method stub
- System.out.println("begin:"+System.currentTimeMillis());
- for(int i=0 ; i<100;i++){
- TestJavaClient test = new TestJavaClient(i);
- test.start();
- }
- System.out.println("end:"+System.currentTimeMillis());
- }
- public TestJavaClient(int i){
- count = i;
- }
- public void run(){
- System.out.println(count+"start:"+System.currentTimeMillis());
- MemcachedClient c= MemCachedManager.getInstance();
- for(int i=0 ; i<1000;i++){
- // Store a value (async) for one hour
- c.set(count+"000"+i, 3600, "Hello World "+count+"000"+i+"!");
- // Retrieve a value (synchronously).
- Object myObject=c.get("liusong"+count);
- }
- System.out.println(count+"end:"+System.currentTimeMillis());
- }
- }
- class MemCachedManager{
- private static MemcachedClient c;
- public static synchronized MemcachedClient getInstance(){
- if(c==null){
- try {
- c=new MemcachedClient(
- AddrUtil.getAddresses("10.148.11.112:11211"));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return c;
- }
- }
Java memcached client同样用100个线程,分别插入后查询1000笔数据,耗时约36s
Java memcached client代码如下:
- public class TestJavaClient extends Thread{
- private int count;
- public static void main(String[] args) throws Exception{
- // TODO Auto-generated method stub
- System.out.println("begin:"+System.currentTimeMillis());
- for(int i=0 ; i<100;i++){
- TestDangaClient test = new TestDangaClient(i);
- test.start();
- }
- System.out.println("end:"+System.currentTimeMillis());
- }
- public TestDangaClient(int i){
- count = i;
- }
- public void run(){
- System.out.println(count+"start:"+System.currentTimeMillis());
- MemCachedManage cache = MemCachedManage.getInstance();
- for(int i=0 ; i<1000;i++){
- // Store a value (async) for one hour
- cache.add(count+"000"+i, "Hello World "+count+"000"+i+"!");
- // Retrieve a value (synchronously).
- Object myObject=cache.get("liusong"+count);
- }
- System.out.println(count+"end:"+System.currentTimeMillis());
- }
- }
- import java.util.Date;
- import com.meetup.memcached.MemcachedClient;
- import com.meetup.memcached.SockIOPool;
- public class MemCachedManage {
- private static MemcachedClient mcc = new MemcachedClient();
- private static MemCachedManage memCachedManager = new MemCachedManage();
- static {
- String[] servers = { "10.148.71.215:11211" };
- Integer[] weights = { 3 };
- SockIOPool pool = SockIOPool.getInstance();
- pool.setServers(servers);
- pool.setWeights(weights);
- pool.setInitConn(100);
- pool.setMinConn(100);
- pool.setMaxConn(250);
- pool.setMaxIdle(1000 * 60 * 60 * 6);
- pool.setMaintSleep(30);
- pool.setNagle(false);
- pool.setSocketTO(3000);
- pool.setSocketConnectTO(0);
- pool.initialize();
- mcc.setCompressEnable(true);
- mcc.setCompressThreshold(64 * 1024);
- }
- protected MemCachedManage() {
- }
- public static MemCachedManage getInstance() {
- return memCachedManager;
- }
- public boolean add(String key, Object value) {
- return mcc.add(key, value);
- }
- public boolean add(String key, Object value, Date expiry) {
- return mcc.add(key, value, expiry);
- }
- public boolean replace(String key, Object value) {
- return mcc.replace(key, value);
- }
- public boolean replace(String key, Object value, Date expiry) {
- return mcc.replace(key, value, expiry);
- }
- public Object get(String key) {
- return mcc.get(key);
- }
- public static void main(String[] args) {
- MemCachedManage cache = MemCachedManage.getInstance();
- cache.add("hello", 234);
- System.out.print("get value : " + cache.get("hello"));
- }
- }
结论,spymemcached更有效率。
=
=
=
+
=
=
=
相关推荐
- `java_memcached-release_2.6.3.jar`:这是Java Memcached客户端的主要库,包含客户端接口和实现。 - `slf4j-api-1.6.0.jar`:Simple Logging Facade for Java (SLF4J)是一个日志抽象层,允许用户在部署时插入所...
这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,
总的来说,Java Memcached客户端库是一个强大的工具,它让Java开发者能够利用Memcached的强大缓存能力,同时保持代码简洁和高效。通过理解这个库的工作原理和提供的API,开发者可以有效地设计和实现高性能的分布式...
Java Memcached客户端是一个高效、轻量级的缓存系统,用于存储和检索数据,通过减少数据库的负载来提高Web应用程序的性能。这个“java_memcached-release_2.6.6.rar”压缩包文件包含了用于与Memcached服务器通信的...
`memcached-1.2.1-win32.zip` 提供了Memcached服务端,而`java_memcached-release_1.6.zip` 提供了Java客户端,使得开发者能够轻松地在Java环境中集成和使用Memcached。学习和掌握这些资源,将有助于构建更加快速、...
2.spymemcached,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。 3.xmemcached,XMemcached也使用得比较广泛,而且...
为了提高性能,Java Memcached客户端库通常会采用连接池管理与服务器的连接,减少每次请求时的建立和关闭连接的开销。此外,它还可能支持批量操作,一次处理多个键值对,进一步提升效率。 7. **持久化与一致性**:...
2. **java_memcached-release_2.6.3.jar**:这是Java Memcached客户端的核心库文件,包含了所有必要的类和方法,使得Java应用能够与Memcached服务器通信。这个库提供了API,让开发者可以方便地进行数据的存取、删除...
在Java应用中,Java Memcached客户端库使得开发人员能够方便地集成Memcached服务,实现数据的快速读取和存储。 标题“java_memcached-release_1.6.zip”表明这是一个Java Memcached的版本1.6的发布包,通常包含了该...
Java连接Memcached的驱动包使得Java开发者能够方便地与Memcached进行交互,实现数据的快速读写。这个驱动包包含了丰富的功能和特性,下面将详细阐述其关键知识点。 ### 1. 基本操作接口 驱动包提供了包括`set`、`...
在Java Memcached客户端中,它被用来有效地管理和复用连接到Memcached服务器的Socket对象,减少创建和销毁对象的开销,从而提高系统性能。 `slf4j-api-1.6.1.jar`和`slf4j-simple-1.6.1.jar`是Simple Logging ...
1. **Memcached客户端接口**:Java Memcached客户端库提供了一个易于使用的API,允许开发者创建、读取、更新和删除(CRUD)存储在Memcached中的键值对。这包括`MemcachedClient`类,它是连接到Memcached服务器的主要...
首先,需要创建一个Memcached客户端实例,通过服务器地址和端口号连接: ```java import net.spy.memcached.AddrUtil; import net.spy.memcached.MemcachedClient; try { MemcachedClient client = new Memcached...
Memcached Cache现在已经被大家广泛使用,但是千万不要认为对Cache的操作是低损耗的,要知道这类集中式Cache对Socket连接数(会牵涉到linux操作系统文件句柄可用数),带宽,网络IO都是有要求的,有要求就意味着会有...
这个压缩包文件包含了`memcached-java`客户端的源代码和CHM格式的API文档,版本为2.8。CHM(Compiled Help Manual)是微软的一种帮助文件格式,通常用于存放程序的离线帮助文档。在这个案例中,CHM API文档是开发者...
gwhalin的Memcached Java客户端是一个高效且易于使用的Java API,它提供了丰富的功能,包括连接池管理、自动重连、命令执行等。这个客户端库不仅支持基本的get、set、delete操作,还支持事务处理、过期时间设置等...
以上就是Java连接和操作Memcached的基本过程。通过合理的缓存策略和有效的数据管理,Memcached能为你的应用程序提供高速的数据访问和优秀的性能优化。在实际开发中,还要注意监控Memcached的性能和容量,以及适时...
它还提供了丰富的特性,如支持完整的协议、客户端分布、节点权重设置、动态增删节点、JMX支持、Spring和Hibernate-memcached集成、连接池功能以及良好的可扩展性。 **推荐与建议** 考虑到官方客户端的新版本在性能...
总结来说,"java_memcached-release_2.6.2.zip"是一个包含Java Memcached客户端库2.6.2版本的压缩包,它为Java开发者提供了与Memcached缓存系统交互的工具,通过高效的数据存储和检索,优化Web应用性能,提高用户...
这个项目可能包含了如何初始化客户端、执行基本操作以及关闭连接的代码片段,是学习和理解Java Memcached API的好起点。 这个演示工程对于那些需要在JDK 1.4环境中使用Memcached的开发者来说尤其有价值,因为它展示...