vs2019c++使用hiredis下载安装

1.下载源码https://github.com/microsoftarchive/redis
第一次打开的时候VS2019会检测解决方案工具集,提示升级,点击确定即可,将工具集升级到最新或者下载对于的v120工具集
在这里插入图片描述
hiredis的编译配置在这里插入图片描述

只需要右键hiredis工程和Win32_Interop工程,分别点击生成,生成hiredis.lib和Win32_Interop.lib即可。
可能会报错system_error不是"std"成员…在这里插入图片描述
解决方法
找到Win32_variadicFunctor.cpp和Win32_FDAPI.cpp分别加上#include <system_error>在这里插入图片描述
再重新编译生成.
在\redis-win-3.2.100\msvs\x64\Debug目录中可以看到两个静态链接库文件:hiredis.lib和Win32_Interop.lib, 至此,我们需要的文件和链接库都有了,接下来就是怎么配置使用的问题了。

新建一个项目,打开【项目属性】对话框,选择【VC++目录】,在【包含目录】中增加我们下载下来的源码的头文件存放的位置,相对路径为:redis-win-3.2.100\src 和 \redis-win-3.2.100\deps\hiredis。这两个文件夹里包含了hiredis需要使用的头文件和c文件。

在【库目录】中选择我们静态链接库存放的位置\redis-win-3.2.100\msvs\x64\Debug
在【链接器】>>【输入】中,选择【附加依赖项】,在其中增加之前编译的链接库文件hiredis.lib,Win32_Interop.lib,用回车来分割即可。这样就配置好了.
补充:调用的项目配置属性c/c+±->代码运行–>MTD,(因为hiredis默认属性是mtd)在这里插入图片描述

redis 订阅者

#include
#include
#include
#include “hiredis\hiredis.h”

using namespace std;
int main()
{
//1、连接Redis服务器
redisContext *context = redisConnect(“127.0.0.1”, 6379);
if (context->err)
{
std::cout << “can not connect to redisserver: 127.0.0.1,port:6379” << endl;
std::cout << “reason:” << context->errstr << endl;
redisFree(context);
context = NULL;
return 0;
}

//2、校验密码
char *auth = "test123";
redisReply *reply = (redisReply *)redisCommand(context, "AUTH %s", auth);
if (NULL == reply)
{
	std::cout << "wrong password!" << endl;
	freeReplyObject(reply);
	redisFree(context);
	context = NULL;
	return 0;
}
freeReplyObject(reply);

//3、选择数据库 - 不选择也可
reply = (redisReply *)redisCommand(context, "SELECT %d", 1);
if (NULL == reply || REDIS_REPLY_ERROR == reply->type)
{
	std::cout << "select failed!" << endl;
	freeReplyObject(reply);
	redisFree(context);
	context = NULL;
	return 0;
}

std::cout << "subscribe redischat!" << endl;

//4、订阅消息  可以订阅多个消息 PSUBSCRIBE pattern 
reply = (redisReply *)redisCommand(context, "SUBSCRIBE %s", "redischat");
if (NULL == reply||reply->type != REDIS_REPLY_ARRAY)//订阅成功返回一个数组标识
{
	std::cout << "subscribe failed!" << endl;
	freeReplyObject(reply);
	redisFree(context);
	context = NULL;
	return 0;
}
freeReplyObject(reply);

//5、阻塞等待订阅消息
while (true)
{
	void *_reply = nullptr;
	if (redisGetReply(context, &_reply) != REDIS_OK)
	{
		continue;
	}
	reply = (redisReply*)_reply;
	for (int nIndex = 0; nIndex < reply->elements; nIndex++)
	{
		std::cout << nIndex + 1 << ")";
		std::cout << reply->element[nIndex]->str << std::endl;
	}
	freeReplyObject(reply);
	std::cout << "***************" << std::endl;
}
redisFree(context);
context = NULL;
return 0;

}
redis发布者

#include
#include
#include
#include “hiredis\hiredis.h”
using namespace std;
int main()
{
//1、连接服务器
redisContext *context = redisConnect(“127.0.0.1”, 6379);
if (context->err)
{
std::cout << “can not connect to redisserver: 127.0.0.1,port:6379” << endl;
std::cout << “reason:” << context->errstr << endl;
redisFree(context);
context = NULL;
return 0;
}

//2、校验密码
char *auth = "test123";
redisReply *reply = (redisReply *)redisCommand(context, "AUTH %s", auth);
if (NULL == reply)
{
	std::cout << "wrong password!" << endl;
	redisFree(context);
	context = NULL;
	return 0;
}
freeReplyObject(reply);

//3、选择数据库
reply = (redisReply *)redisCommand(context, "SELECT %d", 1);
if (NULL == reply || REDIS_REPLY_ERROR == reply->type)
{
	std::cout << "select failed!" << endl;
	redisFree(context);
	context = NULL;
	return 0;
}
std::cout << "publish redischat!" << endl;

//4、推送消息
while (true)
{
	std::string Message;
	char s[1024];
	memset(s, 0, 1024);
	cin >>s;
	Message.append(s);
	reply = (redisReply *)redisCommand(context, "publish %s %s", "redischat", Message.c_str());
	if (NULL == reply || reply->type != REDIS_REPLY_INTEGER)//成功推送几个就会有几个 integer
	{
		break;
	}
	freeReplyObject(reply);
}
if (reply!=NULL)freeReplyObject(reply);
redisFree(context);
context = NULL;
return 0;

}
#endif

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值