- 浏览: 889331 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (306)
- c#历程 (8)
- java (51)
- ruby & rails (40)
- web开发 (5)
- 工作流 (4)
- 数据库技术 (7)
- 数据结构与算法 (12)
- 设计模式 (5)
- 涂鸦 (36)
- erlang (8)
- my open-source (1)
- 源码解读 (6)
- [网站分类]1.网站买球买球官网平台官网平台首页原创java技术区(对买球买球官网平台官网平台首页文章的要求: 原创、高质量、经过认真思考并精心写作。blogjava管理团队会对买球买球官网平台官网平台首页的文章进行管理。) (0)
- [网站分类]4.其他技术区 (12)
- [网站分类]3.非技术区 (1)
- [网站分类]2.java新手区 (0)
社区版块
- ( 33)
- ( 1529)
- ( 28)
最新评论
-
hw7777777:
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?1、 ...
基于java nio的memcached客户端——xmemcached -
since1978:
多久过去了时间能抹平一切
无路用的人 -
fangruanyjq:
[img][/img]引用
用osworkflow写一个请假例子(提供代码下载) -
thinkingmysky:
楼主,你确定,java memached client能处理并 ...
memcached java client性能测试的几点疑问和说明 -
hellostory:
aaa5131421 写道07年2月hibernate已经出来 ...
dozer与beanutils
发布,从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"); //批量获取 listkeys=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();
测试所用类
评论
发布1.10-rc1版本,在我的测试中效率已经超过了spymemcached,其实tps在10000以上已经可以满足大部分应用要求,测试报告和更多信息看
memcached的协议支持一次性get多个key,类似 get key1 key2 key3 ...
xmemcached会将连续的单独get操作合并成一个批量的get操作。
一家朋友的创业公司
在这点上楼主似乎有优势,呵呵,期待楼主分享更多高性能服务器端开发的经验
不敢当,cindy作者是原创,在nio框架初始的阶段能做出cindy那不是一般人能搞定的工作。我改写的yanf4j,其实还是为了自己练手nio,包括现在的xmemcached,也使我对memcached有更深入的理解。
发布,从0.60直接到1.0-beta,主要改进如下:
1、支持更多协议,在已有协议支持的基础上添加了append、prepend、gets、批量gets、cas协议的支持,具体请查看xmemcachedclient类的实例方法。重点是cas操作。
2、memcached分布支持,支持连接多个memcached server,支持简单的余数分布和一致性哈希分布。
3、0.60版本以来的bug修复。
更多信息参考
在这点上楼主似乎有优势,呵呵,期待楼主分享更多高性能服务器端开发的经验
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 一致性哈希算法的实现
图表网
http://www.tubiao.net/
最新测试结果,xmemcached
测试1:开n个线程读写删各10000次,key是string,value是integer,数据单位皆为tps
线程数 | set | get | delete | |||
xmemcached | spymemcached | xmemcached | spymemcached | xmemcached | spymemcached | |
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 | xmemcached | spymemcached | |
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下的测试数据等晚上回家补上。
spymemcached之前在部分项目中的hibernate缓存有用, 性能不错, 对集群支持很好。
希望楼主继续推出对集群的支持。
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了。
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实现的分布式缓存