VS编译redis源码(最详细最完整的方法)

一  redis源码编译

        很多博客对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.

        示例代码如下:

#include "hiredis.h"
#include <windows.h>
#include <iostream>

using namespace std;

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "hiredis.lib")
#pragma comment(lib, "Win32_Interop.lib")

void doTest()
{
	redisContext* c = redisConnect("127.0.0.1", 6379);
	if (c->err)
	{
		cout << "Connect to redisServer failed: " << c->errstr << endl;
		redisFree(c);
		return;
	}

	cout << "Connect to redisServer Success" << endl;

	const char* command1 = "set test1 value1";
	redisReply* r = (redisReply*)redisCommand(c, command1);

	if (NULL == r)
	{
		cout << "Execut command1 failed" << endl;
		redisFree(c);
		return;
	}

	if (!(r->type == REDIS_REPLY_STATUS && (strcmp(r->str, "OK") == 0 || strcmp(r->str, "ok") == 0)))
	{
		cout << "Failed to execute command: " << command1 << endl;
		freeReplyObject(r);
		redisFree(c);
		return;
	}

	freeReplyObject(r);
	cout << "Succeed to execute command" << command1 << endl;

	const char* command2 = "strlen test1";
	r = (redisReply*)redisCommand(c, command2);
	if (r->type != REDIS_REPLY_INTEGER)
	{
		cout << "Failed to execute command" << command2 << endl;
		freeReplyObject(r);
		redisFree(c);
		return;
	}

	int length = r->integer;
	freeReplyObject(r);
	cout << "The length of 'test1' is : " << length << endl;
	cout << "Succeed to execute command :" << command2 << endl;

	const char* command3 = "get test1";
	r = (redisReply*)redisCommand(c, command3);
	if (r->type != REDIS_REPLY_STRING)
	{
		cout << "Failed to execute command : " << command3 << endl;
		freeReplyObject(r);
		redisFree(c);
		return;
	}
	cout << "The value of 'test1' is : " << r->str << endl;
	freeReplyObject(r);
	cout << "Succeed to execute command : " << command3 << endl;

	const char* command4 = "get test2";
	r = (redisReply*)redisCommand(c, command4);
	if (r->type != REDIS_REPLY_NIL)
	{
		cout << "Failed to execute command : " << command4 << endl;
		freeReplyObject(r);
		redisFree(c);
		return;
	}
	freeReplyObject(r);
	cout << "Succeed to execute command : " << command4 << endl;

	redisFree(c);
}

int main()
{
	WSADATA wsaData;
	int nRet;
	if ((nRet = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
	{
		cout << "WSAStartup failed" << endl;
		exit(0);
	}

	doTest();

	system("pause");
	return 0;
}

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

 1.

                              

2

                              

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

                                    

 

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

                                           

               

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:Age of Ai 设计师:meimeiellie 返回首页

打赏作者

令狐掌门

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值