Windows下编译Redis3.2.100

        很多博客对redis的源码编译都说的很笼统,按照他们的方法基本都编译失败了,redis的windows版目前最新版本是3.2,linux版最新是5.0,windows系统用C++连接redis不太方便,如果是Java,用maven下载jedis jar包,配置一下,很好连接redis,而C++则比较麻烦,下面介绍如何用VS2013编译redis源码,并连接redis做项目开发。

         windows版redis源码链接: https://github.com/microsoftarchive/redis/tree/3.2,目前版本分支的是3.2,翻到页面最下面,可以看到相关的使用、编译、测试等说明。

                 

   

         根据官网说明可知,用VS2013编译,但是必须更新到update5, 否则会出现各种编译错误,确实如此,之前用vs2013的其它版本,出现各种错误,无法修改。

         打开VS2013---帮助---关于,即可查看自己的VS版本,例如我重装之后的update5:

                                                                          

         不是VS2013 update5的可以下载重装。

          vs2013 update5下载链接:http://www.121down.com/soft/softview-43319.html

         

         打开redis-win-3.2.100\msvs\RedisServer.sln 一共9个项目:

                                            

         把RedisServer设为启动项目(默认已经设置),编译,如果是update5版的VS2013,是没有编译错误的,可以设置x86, x64,运行结果如下:

                                 

         也可以断点调试

                          

         以上是服务端程序,其它的如客户端redis-cli,  断点之后,再启动客户端可以进行相关代码调试。

                                   

二  C++ 连接redis

         用VS2013创建一个win32控制台程序进行连接测试。需要包含源码中的头文件和编译好的静态库。

         头文件:

        

        lib库目录

       

        无需其它dll, 注意默认编译平台是mixxed platform, 生成的lib和exe在release 目录,不过影响不大,手动改成x86或x64就会到相关目录

     

     C++ 连接redis主要使用hiredis的代码,有些博客的说法有错误,例如:

    (1)把/ src / 下的win32fixes.c放到项目目录下(即main.cpp文件所在位置),我的代码没有这样做;

    (2)hiredis只能在linux上使用,现在也可以在windows上使用;

      

       redis执行程序下载连接:https://github.com/microsoftarchive/redis/releases  解压到任意目录,双击redis-server.exe即可运行。然后编写代码,连接redis-server.

        示例代码如下:


 
 
   
   
   
   
  1. #include "hiredis.h"
  2. #include
  3. #include
  4. using namespace std;
  5. #pragma comment(lib, "ws2_32.lib")
  6. #pragma comment(lib, "hiredis.lib")
  7. #pragma comment(lib, "Win32_Interop.lib")
  8. void doTest()
  9. {
  10. redisContext* c = redisConnect( "127.0.0.1", 6379);
  11. if (c->err)
  12. {
  13. cout << "Connect to redisServer failed: " << c->errstr << endl;
  14. redisFree(c);
  15. return;
  16. }
  17. cout << "Connect to redisServer Success" << endl;
  18. const char* command1 = "set test1 value1";
  19. redisReply* r = (redisReply*)redisCommand(c, command1);
  20. if ( NULL == r)
  21. {
  22. cout << "Execut command1 failed" << endl;
  23. redisFree(c);
  24. return;
  25. }
  26. if (!(r->type == REDIS_REPLY_STATUS && ( strcmp(r->str, "OK") == 0 || strcmp(r->str, "ok") == 0)))
  27. {
  28. cout << "Failed to execute command: " << command1 << endl;
  29. freeReplyObject(r);
  30. redisFree(c);
  31. return;
  32. }
  33. freeReplyObject(r);
  34. cout << "Succeed to execute command" << command1 << endl;
  35. const char* command2 = "strlen test1";
  36. r = (redisReply*)redisCommand(c, command2);
  37. if (r->type != REDIS_REPLY_INTEGER)
  38. {
  39. cout << "Failed to execute command" << command2 << endl;
  40. freeReplyObject(r);
  41. redisFree(c);
  42. return;
  43. }
  44. int length = r->integer;
  45. freeReplyObject(r);
  46. cout << "The length of 'test1' is : " << length << endl;
  47. cout << "Succeed to execute command :" << command2 << endl;
  48. const char* command3 = "get test1";
  49. r = (redisReply*)redisCommand(c, command3);
  50. if (r->type != REDIS_REPLY_STRING)
  51. {
  52. cout << "Failed to execute command : " << command3 << endl;
  53. freeReplyObject(r);
  54. redisFree(c);
  55. return;
  56. }
  57. cout << "The value of 'test1' is : " << r->str << endl;
  58. freeReplyObject(r);
  59. cout << "Succeed to execute command : " << command3 << endl;
  60. const char* command4 = "get test2";
  61. r = (redisReply*)redisCommand(c, command4);
  62. if (r->type != REDIS_REPLY_NIL)
  63. {
  64. cout << "Failed to execute command : " << command4 << endl;
  65. freeReplyObject(r);
  66. redisFree(c);
  67. return;
  68. }
  69. freeReplyObject(r);
  70. cout << "Succeed to execute command : " << command4 << endl;
  71. redisFree(c);
  72. }
  73. int main()
  74. {
  75. WSADATA wsaData;
  76. int nRet;
  77. if ((nRet = WSAStartup(MAKEWORD( 2, 2), &wsaData)) != 0)
  78. {
  79. cout << "WSAStartup failed" << endl;
  80. exit( 0);
  81. }
  82. doTest();
  83. system( "pause");
  84. return 0;
  85. }

         redis的连接编译比较坑,mmp, 我试了几次,才解决一些编译错误,还有之前一些博客的错误引导,坑的一笔。代码贴完后,需要对VS属性做一些修改,如下:

 1.

                              

2

                              

           如果还有其它错误,请自行查询修改

                                    

 

                 代码如果没有错误,运行 结果如下:

                                           

你可能感兴趣的:(Redis,redis,windows)