xecute command[%s] with Pipeline.\n",command4);
if (REDIS_OK !=redisGetReply(c,(void**)&reply)) {
printf("Failed to execute command[%s] withPipeline.\n",command5);
freeReplyObject(reply);
redisFree(c);
}
freeReplyObject(reply);
printf("Succeed toexecute command[%s] with Pipeline.\n",command5);
//由于所有通过pipeline提交的命令结果均已为返回,如果此时继续调用redisGetReply,
//将会导致该函数阻塞并挂起当前线程,直到有新的通过管线提交的命令结果返回。
//最后不要忘记在退出前释放当前连接的上下文对象。
redisFree(c);
return;
}
int main()
{
doTest();
return 0;
}
3.将Redis做为windows服务
Redis的服务器运行时总有个窗口, 感觉很讨厌,发布软件给人的感觉不正规,本打算自己写个服务程序,把Redis-server封装一下,可是发现一篇文章。http://www.cnblogs.com/shanyou/archive/2013/01/17/redis-on-windows.html,原来人家早就有这个功能了。
从https://github.com/MSOpenTech/redis下载了一份Redis 2.6
打算编译一个RedisWatcher,使Redis做为Windows的服务运行。
编译失败。
需要安装Wix,在http://wix.codeplex.com/下载了一个3.8的版本。
安装后进入VS2010重新编译,出现错误LGHT0094,Google了好久,终于找到办法
True ,编译成功。
我的系统是XP,运行InstallWatcher.msi,安装成功,在服务里也出现了redis watcher启动类型为自动。
运行服务失败。1053 服务没有及时响应启动或控制请求。
重启系统也没用什么作用。
在Win7下安装InstallWatcher.msi正常,启动服务正常,Redis也可以正常使用。
开始以为是Wix版本太高,降回到3.6还是老样子。
实在没有办法了,用Dependency Walker看了一下,发现使用ADVAPI32.DLL中的EventRegister、EventUnregister、EventWrite三个函数,而我的系统中的advapi32.dll没有这三个函数。查了一下,发现这几个函数要求的最低版本是WidnowsVista。
没办法,手工把这几个函数去掉吧。
在RedisWatcher.h中,将使用这几个函数的位置都直接注释掉,直接返回ERROR_SUCCESS。
编译……成功,然后VS2010会提示,RedisWatcher.h在外部被修改,是否需要更新,更新进来一看。
RedisWatcher.h又回复了我修改之前的状态。
编译出来的exe文件还是老样子
反复了几次,这个文件还是会被自动恢复。
实在没有办法,用Filemon监控哪些进程读写了RedisWatcher.h,大部分都是cl.exe和devenv.exe,偶然发现有个mc.exe
查了一下,发现这个很奇妙的东西。
http://technet.microsoft.com/zh-cn/library/aa385638
在服务程序中将服务的运行的状态写到日志里,这时就要自己生成一个消息表,将这些消息放到程序里,用ReportEvent就能将记录写到日志里
MC.exe是一个可以生成消息资源文件的工具,生成后的文件可以供应用程序或者DLL使用。
会自动生成*.h,*.rc,*.bin 。
在工程的设置里BuildEvents->Pre-Build Event中存在
mc -um $(ProjectName).man -h "$(ProjectDir)\" -z $(ProjectName)
大致看了下mc的文档,发现有个-mof参数,可以生成支持vsita以前的版本。
mc -um -mof $(ProjectName).man -h "$(ProjectDir)\" -z $(ProjectName)
再次生成的RedisWatcher.h的确没有了那三个函数,可是编译出了一堆错误。也没有心情和时间去细研究Wix和mc,就把正常生成的RedisWatcher.h里自动生成的关于写日志的函数全都去掉。再把mc也去掉。
这次编译成功了,安装后服务也能正常启动。暂时算是成功。
把
InstallWatcher.msi
redis-benchmark.exe
redis-check-aof.exe
redis-check-dump.exe
redis-cli.exe
redis-server.exe
redis.conf
RedisWatcher.exe
RedisWatcher.man
watcher.conf
这些文件复制到redis-2.6\msvs\install\x32目录
然后编译RedisInstall.sln,将会直接生成一个RedisInstall32.msi就可以直接安装,同时选择安装做为服务了。
1. 测试结果
自己写了一个小程序测试下redis数据库的速度如下:
执行100000次hmset user%d key1 value1key2 value2命令用时6.8秒左右
执行1000000次hmset user%d key1value1 key2 value2命令用时70.9秒左右