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

Memcached的java连接客户端_比较和推荐

 
阅读更多

 

github上的Java-Memcached-Client 已经很久没有更新了。没多少人用了吧?可惜。。。

所以得研究一下现状。

有两个出处文章,分别做了对比,结论是这个client是不能用了。

 

============================================================================= ===

 

 Xmemcached 1.2.6.1 released,所以更新了一下Java Memcached Client Benchmark。对比下Xmemached,SpymemcachedJava-Memcached-Client这三个开源客户端的性能,具体的测试信息可以看这个链接

 

 测试源码:

Java代码 
  1. svn co http://xmemcached.googlecode.com/svn/trunk/benchmark/  

  测试结果:

Java代码 
  1. 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会不断地报错:

Java代码 
  1. com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for10.232.36.82:12000  
  2. com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for10.232.36.82:12000  
  3. com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for10.232.36.90:12000  
  4. com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for10.232.36.82:12000  
  5. com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for10.232.36.90:12000  
  6. com.schooner.MemCached.SchoonerSockIOPool Sun Oct 17 11:09:05 GMT+08:00 2010 - ++++ failed to get SockIO obj for10.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

在个人电脑上写了一段程序对比两个客户端的效率(单一memcached服务器),

用100个线程,分别插入后查询1000笔数据,spymemcached耗时约8s

 

对spymemcached测试如下:

 

Java代码  收藏代码
  1. import java.io.IOException;  
  2.   
  3.   
  4. import net.spy.memcached.AddrUtil;  
  5. import net.spy.memcached.MemcachedClient;  
  6.   
  7.   
  8. public class TestSpymemcached extends Thread{  
  9.   
  10.     /** 
  11.      * @param args 
  12.      */  
  13.     private int count;  
  14.       
  15.     public static void main(String[] args) throws Exception{  
  16.         // TODO Auto-generated method stub  
  17.         System.out.println("begin:"+System.currentTimeMillis());  
  18.         for(int i=0 ; i<100;i++){  
  19.             TestJavaClient test = new TestJavaClient(i);  
  20.             test.start();  
  21.         }  
  22.         System.out.println("end:"+System.currentTimeMillis());  
  23.     }  
  24.   
  25.     public  TestJavaClient(int i){  
  26.         count = i;  
  27.     }  
  28.       
  29.     public void run(){  
  30.                 System.out.println(count+"start:"+System.currentTimeMillis());  
  31.                 MemcachedClient c= MemCachedManager.getInstance();  
  32.                 for(int i=0 ; i<1000;i++){  
  33.                     // Store a value (async) for one hour  
  34.                     c.set(count+"000"+i, 3600"Hello World "+count+"000"+i+"!");  
  35.                     // Retrieve a value (synchronously).  
  36.                     Object myObject=c.get("liusong"+count);   
  37.                       
  38.                       
  39.                       
  40.                       
  41.                 }  
  42.                 System.out.println(count+"end:"+System.currentTimeMillis());  
  43.                   
  44.     }  
  45.       
  46. }  
  47.   
  48. class MemCachedManager{  
  49.     private static MemcachedClient c;  
  50.     public static synchronized MemcachedClient getInstance(){  
  51.         if(c==null){  
  52.             try {  
  53.                 c=new MemcachedClient(  
  54.                         AddrUtil.getAddresses("10.148.11.112:11211"));  
  55.             } catch (IOException e) {  
  56.                 // TODO Auto-generated catch block  
  57.                 e.printStackTrace();  
  58.             }  
  59.         }  
  60.         return c;  
  61.     }  
  62. }  

 

Java memcached client同样用100个线程,分别插入后查询1000笔数据,耗时约36s

Java memcached client代码如下:

 

Java代码  收藏代码
  1. public class TestJavaClient extends Thread{  
  2.     private int count;  
  3.       
  4.     public static void main(String[] args) throws Exception{  
  5.         // TODO Auto-generated method stub  
  6.         System.out.println("begin:"+System.currentTimeMillis());  
  7.         for(int i=0 ; i<100;i++){  
  8.             TestDangaClient test = new TestDangaClient(i);  
  9.             test.start();  
  10.         }  
  11.         System.out.println("end:"+System.currentTimeMillis());  
  12.     }  
  13.     public  TestDangaClient(int i){  
  14.         count = i;  
  15.     }  
  16.       
  17.     public void run(){  
  18.                 System.out.println(count+"start:"+System.currentTimeMillis());  
  19.                   
  20.                 MemCachedManage cache = MemCachedManage.getInstance();    
  21.                     
  22.                 for(int i=0 ; i<1000;i++){  
  23.                     // Store a value (async) for one hour  
  24.                       
  25.                     cache.add(count+"000"+i, "Hello World "+count+"000"+i+"!");    
  26.                     // Retrieve a value (synchronously).  
  27.                     Object myObject=cache.get("liusong"+count);   
  28.                       
  29.                 }  
  30.                 System.out.println(count+"end:"+System.currentTimeMillis());  
  31.           
  32.     }  
  33. }  
  34.   
  35.   
  36.   
  37.   
  38. import java.util.Date;    
  39. import com.meetup.memcached.MemcachedClient;    
  40. import com.meetup.memcached.SockIOPool;    
  41.   
  42. public class MemCachedManage {    
  43.     
  44.     
  45.     private static MemcachedClient mcc = new MemcachedClient();    
  46.     
  47.     private static MemCachedManage memCachedManager = new MemCachedManage();    
  48.     
  49.     
  50.     static {    
  51.          
  52.         String[] servers = { "10.148.71.215:11211" };    
  53.         Integer[] weights = { 3 };    
  54.     
  55.        
  56.         SockIOPool pool = SockIOPool.getInstance();    
  57.     
  58.     
  59.         pool.setServers(servers);    
  60.         pool.setWeights(weights);    
  61.     
  62.         
  63.         pool.setInitConn(100);    
  64.         pool.setMinConn(100);    
  65.         pool.setMaxConn(250);    
  66.         pool.setMaxIdle(1000 * 60 * 60 * 6);    
  67.     
  68.           
  69.         pool.setMaintSleep(30);    
  70.     
  71.         
  72.         pool.setNagle(false);    
  73.         pool.setSocketTO(3000);    
  74.         pool.setSocketConnectTO(0);    
  75.     
  76.           
  77.         pool.initialize();    
  78.   
  79.         mcc.setCompressEnable(true);    
  80.         mcc.setCompressThreshold(64 * 1024);    
  81.     }    
  82.     
  83.     
  84.     protected MemCachedManage() {    
  85.     
  86.     }    
  87.   
  88.     public static MemCachedManage getInstance() {    
  89.         return memCachedManager;    
  90.     }    
  91.     
  92.     public boolean add(String key, Object value) {    
  93.         return mcc.add(key, value);    
  94.     }    
  95.     
  96.     public boolean add(String key, Object value, Date expiry) {    
  97.         return mcc.add(key, value, expiry);    
  98.     }    
  99.     
  100.     public boolean replace(String key, Object value) {    
  101.         return mcc.replace(key, value);    
  102.     }    
  103.     
  104.     public boolean replace(String key, Object value, Date expiry) {    
  105.         return mcc.replace(key, value, expiry);    
  106.     }    
  107.     
  108.     public Object get(String key) {    
  109.         return mcc.get(key);    
  110.     }    
  111.     
  112.     public static void main(String[] args) {    
  113.         MemCachedManage cache = MemCachedManage.getInstance();    
  114.         cache.add("hello"234);    
  115.         System.out.print("get value : " + cache.get("hello"));    
  116.     }    
  117. }    

 

结论,spymemcached更有效率。

 

=

=

=

+

=

=

=

 

分享到:
评论

相关推荐

    java_memcached-release_2.6.3.rar 客户端所有包

    - `java_memcached-release_2.6.3.jar`:这是Java Memcached客户端的主要库,包含客户端接口和实现。 - `slf4j-api-1.6.0.jar`:Simple Logging Facade for Java (SLF4J)是一个日志抽象层,允许用户在部署时插入所...

    MemCached开发java客户端的使用

    这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,

    java_memcached-release_2.5.1.jar Memcache java jar 包

    总的来说,Java Memcached客户端库是一个强大的工具,它让Java开发者能够利用Memcached的强大缓存能力,同时保持代码简洁和高效。通过理解这个库的工作原理和提供的API,开发者可以有效地设计和实现高性能的分布式...

    java_memcached-release_2.6.6.rar

    Java Memcached客户端是一个高效、轻量级的缓存系统,用于存储和检索数据,通过减少数据库的负载来提高Web应用程序的性能。这个“java_memcached-release_2.6.6.rar”压缩包文件包含了用于与Memcached服务器通信的...

    memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip

    `memcached-1.2.1-win32.zip` 提供了Memcached服务端,而`java_memcached-release_1.6.zip` 提供了Java客户端,使得开发者能够轻松地在Java环境中集成和使用Memcached。学习和掌握这些资源,将有助于构建更加快速、...

    memcached的三种java客户端jar

    2.spymemcached,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。 3.xmemcached,XMemcached也使用得比较广泛,而且...

    java_memcached-release_2.6.6

    为了提高性能,Java Memcached客户端库通常会采用连接池管理与服务器的连接,减少每次请求时的建立和关闭连接的开销。此外,它还可能支持批量操作,一次处理多个键值对,进一步提升效率。 7. **持久化与一致性**:...

    java_memcached-release_2.6.3.zip

    2. **java_memcached-release_2.6.3.jar**:这是Java Memcached客户端的核心库文件,包含了所有必要的类和方法,使得Java应用能够与Memcached服务器通信。这个库提供了API,让开发者可以方便地进行数据的存取、删除...

    java_memcached-release_1.6.zip

    在Java应用中,Java Memcached客户端库使得开发人员能够方便地集成Memcached服务,实现数据的快速读取和存储。 标题“java_memcached-release_1.6.zip”表明这是一个Java Memcached的版本1.6的发布包,通常包含了该...

    memcached java客户端驱动包

    Java连接Memcached的驱动包使得Java开发者能够方便地与Memcached进行交互,实现数据的快速读写。这个驱动包包含了丰富的功能和特性,下面将详细阐述其关键知识点。 ### 1. 基本操作接口 驱动包提供了包括`set`、`...

    java_memcached-release_2.6.6.jar及其依赖包

    在Java Memcached客户端中,它被用来有效地管理和复用连接到Memcached服务器的Socket对象,减少创建和销毁对象的开销,从而提高系统性能。 `slf4j-api-1.6.1.jar`和`slf4j-simple-1.6.1.jar`是Simple Logging ...

    java_memcached-release_2.0.1.zip

    1. **Memcached客户端接口**:Java Memcached客户端库提供了一个易于使用的API,允许开发者创建、读取、更新和删除(CRUD)存储在Memcached中的键值对。这包括`MemcachedClient`类,它是连接到Memcached服务器的主要...

    Memcached之java客户端开发

    首先,需要创建一个Memcached客户端实例,通过服务器地址和端口号连接: ```java import net.spy.memcached.AddrUtil; import net.spy.memcached.MemcachedClient; try { MemcachedClient client = new Memcached...

    java_memcached-release_2.5.1

    Memcached Cache现在已经被大家广泛使用,但是千万不要认为对Cache的操作是低损耗的,要知道这类集中式Cache对Socket连接数(会牵涉到linux操作系统文件句柄可用数),带宽,网络IO都是有要求的,有要求就意味着会有...

    memcached-java_2.8,客户端,源代码,chm_api

    这个压缩包文件包含了`memcached-java`客户端的源代码和CHM格式的API文档,版本为2.8。CHM(Compiled Help Manual)是微软的一种帮助文件格式,通常用于存放程序的离线帮助文档。在这个案例中,CHM API文档是开发者...

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

    gwhalin的Memcached Java客户端是一个高效且易于使用的Java API,它提供了丰富的功能,包括连接池管理、自动重连、命令执行等。这个客户端库不仅支持基本的get、set、delete操作,还支持事务处理、过期时间设置等...

    java中连接memcached服务器

    以上就是Java连接和操作Memcached的基本过程。通过合理的缓存策略和有效的数据管理,Memcached能为你的应用程序提供高速的数据访问和优秀的性能优化。在实际开发中,还要注意监控Memcached的性能和容量,以及适时...

    memcached客户端(三种客户端)

    它还提供了丰富的特性,如支持完整的协议、客户端分布、节点权重设置、动态增删节点、JMX支持、Spring和Hibernate-memcached集成、连接池功能以及良好的可扩展性。 **推荐与建议** 考虑到官方客户端的新版本在性能...

    java_memcached-release_2.6.2.zip

    总结来说,"java_memcached-release_2.6.2.zip"是一个包含Java Memcached客户端库2.6.2版本的压缩包,它为Java开发者提供了与Memcached缓存系统交互的工具,通过高效的数据存储和检索,优化Web应用性能,提高用户...

    java_memcached-release_1.3.2的演示工程(JDK1.4)

    这个项目可能包含了如何初始化客户端、执行基本操作以及关闭连接的代码片段,是学习和理解Java Memcached API的好起点。 这个演示工程对于那些需要在JDK 1.4环境中使用Memcached的开发者来说尤其有价值,因为它展示...

Global site tag (gtag.js) - Google Analytics