最近闲来无事编写了一个异步redis客户端.为了测试其性能逐对redis和ssdb作了一次性能对比测试.redis
首先介绍下测试环境,i5 4核心 3.6主频的台式机器,服务器客户断均运行在同一台机器上.服务器
测试内容是1000条hashtable数据,分别有两个属性chianfo和skill,每一个属性存放100字节左右的字符串.
使用hmget chaid:xx chainfo skills命令向服务器获取数据.网络
客户端跟服务器创建单一连接,初始时先提交1000个请求,而后每收到一个答复马上发起一个新的请求.
也就是说相似一个pingpong测试.异步
redis的qps很是惊人,达到了45W/,而ssdb只有2.5W/s.性能
这里先简单介绍下ssdb的处理,首先有一个主线程接受户链接,接收客户端过来的请求,解析出操做以后投递
给reader线程,由reader线程处理请求并将响应返回给客户端.在大概分析了各线程的cpu利用率以后,我对
ssdb的源代码作了一点调整,取消reader线程的工做,将请求直接在主线程中处理并返回响应.测试
修改以后,ssdb的qps达到了5.2W.后来将这个测试的结果跟ssdb的做者交流了一下,得知新版本的ssdb也会作相似调整.线程
这里不得不赞一下redis的网络处理部分写得很是高效.redis的主线程cpu消耗不过50%.而个人客户端已经到达了80%.
一样的测试,在修改事后的ssdb上,主线程利用率几乎到达100%(5.2w qps),个人客户端在30%左右.字符串