xmemcached介绍(发布1.10-买球官网平台

`

xmemcached介绍(发布1.10-rc1)

发布,从0.60直接到1.0-beta,主要改进如下:
1、支持更多协议,在已有协议支持的基础上添加了append、prepend、gets、批量gets、cas协议的支持,具体请查看xmemcachedclient类的实例方法。重点是cas操作。
2、memcached分布支持,支持连接多个memcached server,支持简单的余数分布和一致性哈希分布。
3、0.60版本以来的bug修复。

更多信息参考

 

 

1、xmemcached是什么?

 

基于java nio实现的memcached客户端api。

实际上是基于我实现的一个简单nio框架 的基础上实现的(目前是基于yanf4j 0.54),序列化机制直接挪用spymemcached的transcoder。

性 能方面与spymemcached相比各有优势,spymemcached在windows和linux两个平台上的效率差异很大(特别是容器类大对象的 读写上),而xmemcached就没有这个问题,如果你的get操作远远多于存储操作,那么xmemcached对于get的优化在并发下的效果更加明 显。

当 前1.0-beta版本,支持memcached的分布式(余数哈希和一致性哈希算法)。目前已经支持get、set、add、replace、cas、 append、prepend、批量get/gets、delete、incr、decr、version这几个协议。api为阻塞模型,而非 spymemcached的异步模型,异步模型在批处理的时候有优势,但是阻塞模型在编程难度和使用上会容易很多。

后续计划:

1.0 正式稳定版

1.1 着重性能优化

 

 


 

2、为什么叫xmemcached?

因为我在厦门(xm)混饭......

3、xmemcached的下载和使用

项目买球官网平台主页:

下载地址:

wiki地址:

下载的压缩包中包括了依赖库、源码和打包后的jar,放到项目的lib目录下即可使用。

 

使用:

 

 import net.rubyeye.xmemcached.xmemcachedclient;
   ......
   ......
   //xmemcachedclient是线程安全的,可以被多线程使用
   xmemcachedclient client= new xmemcachedclient(ip, port);
   //存储操作
   if (!client.set("hello", 0, "dennis")){
        system.err.println("set error");
   }
   client.add("hello", 0, "dennis");
   client.replace("hello", 0, "dennis");
   //get操作
   string name=(string)client.get("hello");
   
   //批量获取
   list keys=new arraylist();
   keys.add("hello");
   keys.add("test");
   map map=client.get(keys);
   //delete操作
   if (!client.delete("hello",1000)){
        system.err.println("delete error");
   } 
   //incr,decr操作
   client.incr("a",4);
   client.decr("a",4);
   //查看memcached版本
   string version=client.version();
    
   client.shutdown();
   
 

 

 


    测试所用类

 

分享到:
评论
22 楼 2009-12-10  
楼主现在是不是被挖到阿里旗下了
21 楼 dennis_zane 2009-04-28  

发布1.10-rc1版本,在我的测试中效率已经超过了spymemcached,其实tps在10000以上已经可以满足大部分应用要求,测试报告和更多信息看


 

20 楼 dennis_zane 2009-04-15  
crazycode 写道
问一下,批量get是什么原理?是组合成一个memcache请求吗?还是只是一个调用接口,内部还是多次memcache请求?


memcached的协议支持一次性get多个key,类似 get key1 key2 key3 ...

xmemcached会将连续的单独get操作合并成一个批量的get操作。
19 楼 2009-04-15  
问一下,批量get是什么原理?是组合成一个memcache请求吗?还是只是一个调用接口,内部还是多次memcache请求?
18 楼 2009-03-19  
楼主能否改进下memcached服务器端,让memcached在一个对象时效的时候,回调客户端通知java代码进行处理。
17 楼 dennis_zane 2009-03-10  
yulenice 写道
老兄,厦门什么公司

一家朋友的创业公司
16 楼 2009-03-10  
老兄,厦门什么公司
15 楼 dennis_zane 2009-03-10  
bachmozart 写道
cindy的作者最初在写cindy这个框架时,还没有读unp,并且那时也还没有c/c 服务器端开发的背景

在这点上楼主似乎有优势,呵呵,期待楼主分享更多高性能服务器端开发的经验


不敢当,cindy作者是原创,在nio框架初始的阶段能做出cindy那不是一般人能搞定的工作。我改写的yanf4j,其实还是为了自己练手nio,包括现在的xmemcached,也使我对memcached有更深入的理解。
14 楼 dennis_zane 2009-03-10  

发布,从0.60直接到1.0-beta,主要改进如下:

1、支持更多协议,在已有协议支持的基础上添加了append、prepend、gets、批量gets、cas协议的支持,具体请查看xmemcachedclient类的实例方法。重点是cas操作。

2、memcached分布支持,支持连接多个memcached server,支持简单的余数分布和一致性哈希分布。

3、0.60版本以来的bug修复。


 


更多信息参考

13 楼 2009-03-07  
cindy的作者最初在写cindy这个框架时,还没有读unp,并且那时也还没有c/c 服务器端开发的背景

在这点上楼主似乎有优势,呵呵,期待楼主分享更多高性能服务器端开发的经验
12 楼 2009-03-07  
选题不错,要比cindy更好呵!
11 楼 dennis_zane 2009-03-07  

 

linux下的测试报告


 


   翠花,上图,首先是容器类和自定义对象的get、set在不同并发下的表现











   
很明显,在linux下,spymemcached读写复杂对象的效率远远超过在windows下的表现,xmemcached在两个平台之间表现平稳,
在linux上get效率低于spymemcached,差距比较大,准备再优化下;set效率略高于spymemcached。



    xmemcached  0.70将支持多服务器功能和简单的分布能力,基于hash key后模节点数的余数值做分布,这也是spymemcached默认的分布方式,一致性哈希暂不实现。下面是在linux下多节点情况下读写简单类型的效率对比











   两者都是在从一个节点到两个节点的变化中效率有一个显著下降,在2个节点到更多节点过程中下降的幅度开始减小,曲线变的相对平稳。



xmemcached路线图

0.70  多服务器和简单分布

0.80  更多memcached协议支持

0.90  一致性哈希算法的实现


10 楼 dennis_zane 2009-03-07  
pandonix 写道
lz的贴图是用什么工具画的?

图表网
http://www.tubiao.net/

9 楼 2009-03-06  
厦门的  支持一个
8 楼 2009-03-06  
lz的贴图是用什么工具画的?
7 楼 dennis_zane 2009-03-06  

最新测试结果,xmemcached


 


 


测试1:开n个线程读写删各10000次,key是string,value是integer,数据单位皆为tps










































































 线程数          set           get         delete

           
  xmemcached spymemcached xmemcachedspymemcached

           
 xmemcachedspymemcached

           
 1 3368 3047 3422 3232 3787 3404
 10 12307 11742 15274 12623 13473 13473
 50 22115 23021 30769 22630 24483 23222
 100 22448 25467 32569 24105 25538 28119
 200 24187 26165 35320 21379 26683 28181
 500 24623 28810 36955 14328 27609 29789










观察下结果,明显的一点是xmemcached的get比之spyememcached快得多,考虑到memcached是作为缓存使用,这一点很重要。在set、delete上面仍然比spymemcached稍有不如,但是差距已经很小。







测试2:开n个线程读写各100次,key是string,value是100个元素的map(map的key和value分别是string和一个自定义类nameclass),memcached内存加大,防止lru起作用。




















































 线程数          set           get
  xmemcached spymemcached xmemcachedspymemcached

           
 1 492 377 581 531
 10 1362 84 831 753
 30 1536 66 1015 872
 50 1608 68 1126 1084
 100 1576 67 989 1347




  

 观察数据结果,难以理解的是spymemcached在写集合方面竟然如此低效,通过jprofiler观察两者的cpu占用,最大头的都是序列化自定
义对象;不过我昨天在ubuntu下开发xmemcached的时候随手测过,spymemcached写集合并没有在windows下这么慢。



    以上测试数据使用的memcached是2.2版本,xmemcached是,系统是windows xp,amd双核2g内存,memcached是跑在局域网内的服务器上,版本是1.2.2。linux下的测试数据等晚上回家补上。





  





6 楼 2009-03-06  
支持原创,开源,和性能改进。

spymemcached之前在部分项目中的hibernate缓存有用, 性能不错, 对集群支持很好。
希望楼主继续推出对集群的支持。
5 楼 2009-03-04  
bachmozart 写道
对yanf4j很感兴趣

reactor 好像就是cindy的那个

我记得cindy里就是reactor单线程处理注册事件,dispatcher事件,外部通过将感兴趣的事件加到reactor的interestqueue里,由reactor在beforeselect时读取并注册,感兴趣的事件被触发交给另一个线程处理(filterchain)

也就是说cindy是1个dispatcher线程,1个workers线程,workers可以自己扩展(加个线程池什么的),说的不对的地方还请指出

我想问下yanf4j的线程模型,呵呵,这样看代码时能快点,o(∩_∩)o...




cindy里面的workers应该默认是1,具体数量是可配置的。在内部实现中,是一个worker线程数组()来对dispatcher分发的任务进行处理的。
mina的线程模型其实跟cindy差不多,ioacceptor采用executor线程池方式来调度worker线程,负责与客户端建立连接以及创建session。ioprocessor也采用线程池方式,其worker线程负责轮询selector,如果当前的key可读取,则读取数据,并触发filterchain的messagerecevie方法(如果没有进行线程池扩展,所有的filter和iohandler的messagerecv方法都在worker中被执行)。同时,ioprocessor还负责flush待发送数据的session。
呵呵,yanf4j没有研究过,不好意思,感觉有点跑题了。权当冒个泡,别管我,大家继续!
ps:楼上的,难得遇到还有cindy的粉丝,幸会啊。cindy当年是何等辉煌,国人在sf的骄傲啊。个人感觉完全强于mina的前身netty。自从roger chen去了hp,ms就停止了对cindy的维护。反观netty,被apache招安后,改名mina,作者都已经连续参加两届javaone了。
4 楼 2009-03-04  
哦 这个是你写的呀 呵呵 太好了 你qq号告诉我吧 多多向你请教
3 楼 dennis_zane 2009-03-04  
bachmozart 写道
对yanf4j很感兴趣

reactor 好像就是cindy的那个

我记得cindy里就是reactor单线程处理注册事件,dispatcher事件,外部通过将感兴趣的事件加到reactor的interestqueue里,由reactor在beforeselect时读取并注册,感兴趣的事件被触发交给另一个线程处理(filterchain)

也就是说cindy是1个dispatcher线程,1个workers线程,workers可以自己扩展(加个线程池什么的),说的不对的地方还请指出

我想问下yanf4j的线程模型,呵呵,这样看代码时能快点,o(∩_∩)o...



yanf4j的线程模型是selector.select跟op_write的处理共用一个线程,而op_read是可配置,默认是一个线程,也就是select、op_read和op_write的处理是1:1的配置,而对于message的派发默认是没有dispacher这个概念的,派发要多线程还是就是原read线程取决于应用层。yanf4j就是在cindy2.x的基础上改的,揉和一些grizzly的想法(如使用临时selector阻塞读写)和我想要的功能,做了大幅度简化,只提供非阻塞模型。

相关推荐

    xmemcached-1.4.3.jar

    xmemcached-1.2.6.2

    xmemcached1.3.5源码-附带自己写的rmi调用它的jmx服务,使用rmi调用jmx服务的详细过程,完整的eclipse工程,直接导入即可用。还用一些运行截图,很有用。 自己写的例子,类名是baseexample 和rmitest.

    xmemcached是一个新java memcached client。也许你还不知道memcached是什么?可以先看看这里。简单来说,memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态web应用以减轻数据库负载,现在也有...

    xmemcached-1.2.4的官方源码。 xmemcached xmemcached is a high performance, easy to use blocking multithreaded memcached client in java. it's nio based (using my opensource nio framework :yanf4j), ...

    需要xmemcached-1.2.5 spring-2.5.6 class="net.rubyeye.xmemcached.utils.xmemcachedclientfactorybean" destroy-method="shutdown"> ${xmemcached_servers} <!-- server's weights --> ...

    还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。。。 xmemcached-1.2.5.jar

    xmemcached-1.4.2最新版,可用。memcached java客户端

    xmemcached最新版本2.0.0.0

    java memcached client xmemcached memcache-client-forjava

    repository\com\googlecode\xmemcached\xmemcached 2.4.6

    xmemcached使用的jar,需要的可以下载

    xmemcached-1.3.3-src.tar.gz,xmemcached-1.3.3,readme.md,pom.xml,src,test,resources,test.properties,log4j.properties,sampleapplicationcontext.xml,applicationcontext.xml,golden_compass.txt,java,net,...

    xmemcached中文开发手册,提供的版本较老,但针对2.0的版本次文档同样适用,可以入门

    xmemcached.chm帮助文档

    测试类包括xmemcached客户端与memcached client for java两者,可运行比较性能。 xmemcached简介: xmemcached是基于 java nio的memcached客户端,java nio相比于传统阻塞 io 模型来说,有 效率高(特别在高并发下...

    xmemcached 接口文档,方便开发和学习

    基于java nio实现的高性能可扩展的memcached客户端。虽然java的memcached库已经很多,但是这些java开源memcached库并没有一个是基于nio框架编写,因此...xmemcached的项目买球官网平台主页在:http://code.google.com/p/xmemcached/

    xmemcached一个java实现的分布式缓存xmemcached一个java实现的分布式缓存xmemcached一个java实现的分布式缓存xmemcached一个java实现的分布式缓存

global site tag (gtag.js) - google analytics