- 测试环境描述
硬件:
虚拟机 VMware Workstation
内存 320M
Cpu 1.86G*2
软件
memcached-1.2.5
lserver 项目地址 http://code.google.com/p/lserver
基于lserver 的类似memcached服务器, test_mc.cpp, 实现代码如下
/*
*
*
* msn: ljw2001323500@163.com
* email: ljw2001323500@163.com
* author: 蓝金伟(lanjinwei)
* @2009
*
*/
#include “server.hpp”
#include “task.hpp”
#include “util.hpp”
#include <lbase/lbase.h>
lserver::server srv;
map<std::string, std::string> _kv;
void mcCallBack(lserver::datatask task)
{
lserver::connection* cnn = srv.getConnection();
std::string ip = cnn->clientIp(task._fd);
std::string data = task._data;
std::string cmd = “”;
std::string key = “”;
std::string value = “”;
data = data.substr(0, data.size()-2);
std::vector <std::string > result;
lbase::String::splitString(data,’ ‘,result);
std::string outstring = “”;
if (result.size() < 2)
{
outstring = “ERROR\r\n”;
lserver::write_back(task._fd, task._ver, outstring);
return;
}
cmd = result[0];
if (cmd == “get”)
{
key = result[1];
value = _kv[key];
//std::cout << “get” << ” ” << key << ” = ” << value << std::endl;
char size[10] = “”;
if (value == “”)
outstring = “END\r\n”;
else
{
outstring += “VALUE “;
outstring += key;
outstring += ” 0 “;
sprintf(size, “%d”, value.size());
outstring += size;
outstring += “\r\n”;
outstring += value;
outstring += “\r\n”;
outstring += “END\r\n”;
}
}
else if (cmd == “set”)
{
if (result.size() != 3)
outstring = “ERROR\r\n”;
else
{
key = result[1];
value = result[2];
//std::cout << key << ” = ” << value << std::endl;
_kv[key] = value;
outstring = “STORED\r\n”;
}
}
else
outstring = “ERROR\r\n”;
lserver::write_back(task._fd, task._ver, outstring);
return;
}
main()
{
std::string ename = “test_mcsrv”;
std::string pwd = “./”;
u_int32_t maxfd = 102400;
lserver::sys_init(ename, pwd, maxfd);
string ip = “127.0.0.1″;
srv.init(ip, 11211, 1000, 1024, 20, mcCallBack);
srv.run();
}
- 测试结果
单连接,一个key重复set/重复100万次
| Memcached | Lserver+mc | |
| 每秒处理量 | 3800次/s | 2700次/s |
| 平均响应时间 | 0.26ms | 0.37ms |
| Cpu占用 | 38% | 55% |
| 内存占用 | 2M | 1M |
单连接,一个key重复get/重复100万次
| Memcached | Lserver+mc | |
| 每秒处理量 | 3800次/s | 2700次/s |
| 平均响应时间 | 0.26ms | 0.37ms |
| Cpu占用 | 30% | 55% |
| 内存占用 | 2M | 1M |
单连接,多个key值set/set100万次(个)
| Memcached | Lserver+mc | |
| 每秒处理量 | 3311次/s | 2400次/s |
| 平均响应时间 | 0.30ms | 0.42ms |
| Cpu占用 | 40% | 50% |
| 内存占用 | 88M | 77M |
单连接,多个key值get/get100万次(个)
| Memcached | Lserver+mc | |
| 每秒处理量 | 3267次/s | 2358次/s |
| 平均响应时间 | 0.30ms | 0.42ms |
| Cpu占用 | 40% | 50% |
| 内存占用 | 88M | 77M |
- 结论
结果显示,Lserver的mc 比 memcached本身在综合素质上差20%-30%

