`
fantaxy025025
  • 浏览: 1250919 次
  • 性别: 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更有效率。

 

=

=

=

+

=

=

=

 

分享到:
评论

相关推荐

    MemCached开发java客户端的使用

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

    memcached的三种java客户端jar

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

    java_memcached-release_2.5.1

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

    memcached java客户端驱动包

    java连接memcached的驱动包 1.提供set,get,add,replace等接口. 2.提供memcached的集群方案. 3.文档,源码齐全. 4.开源.

    memcached客户端工具

    TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理、维护。 功能包括:NoSQL数据库的展示,库表的展示,key,value的展示,新增,修改,删除等数据的...

    java memcahe 客户端 2.6.1

    这次,Memcached Java Client推出的2.6.1发布版是基于全新的performance分支,具有如下重大改进: 较之老版本,在性能上有300%左右的提升; 兼容老版本,用户无须修改自己的源代码; 支持多个memcached协议,包括...

    memcached的java示例工程

    --在该工程中有两种java的客户端 在性能上你可自己运行比较 a.xmemcached b.java_memcached 参考链接:**一定要看,很详细的** http://tech.ddvip.com/2008-10/122405819878206.html ----------memcached...

    Java的开源高性能memcached客户端XMemcached.zip

    Xmemcached是基于java nio实现的高性能可扩展的memcached客户端。它的主要特点: 高性能,稳定可靠,已经在众多公司的众多项目里得到应用。 功能完备:客户端分布式、权重、最新最完整的协议支持。 ...

    memcached1

    首先到http://danga.com/memcached/下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可!首先是安装运行memcached服务器,...

    Memcache入门到精通[张振华.Jack]

    Memcached介绍、应用场景、运行机制 Memcached安装 Memcached启动,参数 ...Memcached的Java客户端实例 Memcached的客户端分布式原理 Memcached的服务器端运行原理 Memcached的过期机制 Memcached同比 QA

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    29道memcached面试题含答案(很全)

    其中,get命令用于获取存储在Memcached中的数据,set命令用于存储数据,delete命令用于删除数据,quit命令用于断开客户端连接。 此外,Memcached还具有高可用性和容错性,可以在多个服务器上部署形成一个集群,以...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics