windows上使用VS2012 C++语言调用Redis的解决方案

最近我在VS2012上进行Redis开发遇到一些困扰. 编译Redis的lib库没问题。但是使用这些lib库就不太顺利了. 在网上查来查去也没解决。不过其实Redis的客户端项目RedisCli.vcxproj,就是一个最好的使用例子. 我把几个需要注意的地方贴出来


注意事项1. 链接器->输入->忽略所有默认库: 应该设置为"否"  

这里不能选择"是 (/NODEFAULTLIB)" 否则会产生如下错误(这只是其中的一部分)

1>win32fixes.obj : error LNK2019: 无法解析的外部符号 ___report_rangecheckfailure,该符号在函数 _wsa_strerror 中被引用
1>hiredis.lib(hiredis.obj) : error LNK2001: 无法解析的外部符号 ___report_rangecheckfailure
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __beginthreadex,该符号在函数 _pthread_create 中被引用
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __endthreadex,该符号在函数 _win32_proxy_threadproc@4 中被引用
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __cwait,该符号在函数 _wait3 中被引用
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __errno,该符号在函数 _replace_ftruncate 中被引用

注意事项2: 你的工程文件需要引入win32fixes.c.

如果没有引入win32fixes.c.则会产生如下错误.

1>hiredis.lib(hiredis.obj) : error LNK2019: 无法解析的外部符号 _strerror_r,该符号在函数 ___redisSetError 中被引用
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 _strerror_r
1>hiredis.lib(net.obj) : error LNK2019: 无法解析的外部符号 _replace_setsockopt,该符号在函数 _redisContextSetTimeout 中被引用
1>D:\work\MOM\RedisTest\Debug\Test.exe : fatal error LNK1120: 2 个无法解析的外部命令

注意事项3:如果你的项目使用了预编译头,那么win32fixes.c也需要添加预编译头include "stdafx.h".

有可能还会遇到变量和函数重定义的问题. 比如sleep函数.BOOLEAN类型等。最好单独的把Redis封装成一个类库使用.独立在exe项目之外.


要在C++语言调用Redis,可以使用RedisC++客户端库。以下是使用Redis C++客户端库的一些基本步骤: 1. 首先,确保你已经安装了Redis,并且可以正常运行。 2. 下载并安装Redis C++客户端库。推荐使用hiredis库,它是一个基于C的库,提供了与Redis交互的API。你可以从官方GitHub仓库下载并编译安装该库。 3. 在你的C++项目中包含Redis C++客户端库的头文件。 4. 连接到Redis服务器。使用hiredis库,你可以使用以下代码连接到Redis服务器: ```cpp #include <hiredis/hiredis.h> int main() { redisContext* redis = redisConnect("localhost", 6379); if (redis == NULL || redis->err) { if (redis) { printf("Error: %s\n", redis->errstr); redisFree(redis); } else { printf("Can't allocate redis context\n"); } return 1; } // 连接成功,可以进行后续操作 // ... // 关闭连接 redisFree(redis); return 0; } ``` 5. 在连接成功后,你可以使用hiredis库提供的API执行各种Redis命令。例如,以下代码演示了如何执行SET和GET命令: ```cpp redisReply* reply = (redisReply*)redisCommand(redis, "SET key value"); freeReplyObject(reply); reply = (redisReply*)redisCommand(redis, "GET key"); if (reply->type == REDIS_REPLY_STRING) { printf("GET key: %s\n", reply->str); } freeReplyObject(reply); ``` 这里的`redisCommand`函数用于执行Redis命令,并返回一个`redisReply`对象,你可以通过检查其`type`字段来确定返回值的类型,然后获取相应的值。需要注意的是,使用完`redisReply`对象后,需要使用`freeReplyObject`函数释放它。 除了SET和GET命令,Redis还支持其他各种命令(例如HSET、HGET、LPUSH、LPOP等),你可以根据自己的需求使用适当的命令。 总之,以上是在C++语言调用Redis的基本步骤。你可以根据具体情况和需求,使用Redis C++客户端库执行各种操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值