设为首页 收藏本站
查看: 2281|回复: 0

[经验分享] windows下使用c++调用redis

[复制链接]
发表于 2015-7-19 14:20:45 | 显示全部楼层 |阅读模式
  不废话,unix下c++调用 redis可以看这个:

http://blog.iyunv.com/youngqj/article/details/8266177
  ==================================================================================
  redis的官网版本并没有为vc开发提供接口,不过微软对redis好像很感兴趣,自己弄了一个 ,完整的英文说明在这里:
  https://gist.github.com/MS-Interop/1439660    根据说明,一套完整下来,你就可以自己搭一个VC版本的 redis。
  因为流程比较复杂,怕以后自己要用又忘记,趁记得写下来。
  ==========================================================================================

下面的步骤其实就是要弄出  MSOpenTech/redis(https://github.com/MSOpenTech/redis)里面的redis/msvs中的sln,链接中有下载,但我打不开,如果你能打开请无视下面的,直接使用。
  或者下载这个:http://download.iyunv.com/detail/biantaiwangzi/7864413
  ==========================================================================================
  1.首先要先配置好git ,详细的内容在这里:http://www.iyunv.com/sixbeauty/p/3954223.html
  
  2.新建一个文件夹(名为redis_build好了),打开cmd,cd进去,使用git弄一个antirez/redis的备份。



git clone https://github.com/antirez/redis.git

  
  3.接下来的几个命令照打就好:



cd redis
git checkout 3fac86ff1d



git checkout -b 2.4_win_uv

  
  4.下载redis24_win_uv.patch,(其实就是英文说明最下面那个。)必须要先下载才能执行成功。
  把 (redis24_win_uv.patch) 拉到之前创建的目录redis_bulid下的redis里面,执行:



git am redis24_win_uv.patch

  如果有下面的warning提示可以忽略:



warning: squelched 210 whitespace errors
warning: 215 lines add whitespace errors.

  
  5.继续执行:



curl https://raw.github.com/gist/1439660/d729b823a7ef50ef8ba54393675fb678e740ca4b/redis24_win_uv.patch | git am

  到这一步执行完,在redis文件夹下面的msvs里面,我们就能得到RedisServer.sln文件。
  但现在还是没用搞定。
  6.下载:ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-8-0-release.exe,执行。在redis/deps 下 建 pthreads-win32 文件夹。
  6.1、把pre-built.2的include复制到 pthreads-win32里面。
  6.2、把pre-built.2的lib中的   "pthreadVC2.dll"和"pthreadVC2.lib" 复制到 pthreads-win32/lib/debug 中,并把 "pthreadVC2.lib"改名为"pthread.lib" 。(如果是release版就复制到 pthreads-win32/lib/release  中)
  
  7.现在可以打开 RedisServer.sln 编译生成了。
  
  ======================================分割线================================================

使用:
  编译完成后,在msvs中的Debug中有hiredis的lib,使用它我们就能建立windows下redis的c++开发环境了:

1.配置:
  a. 添加包含目录
  【项目->属性->配置属性->VC++ 目录->包含目录】  中添加两个文件目录:  
  **/redis/src;**/redis/deps/hiredis  
  注:这两个文件就是刚刚我们的sln目录中的
  
  b. 添加库目录
  【项目->属性->配置属性->VC++ 目录->库目录】添加   **/redis\msvs\Debug
  
  c. 添加依赖库
  项目->属性->链接器->输入->附加依赖项->ws2_32.lib;hiredis.lib;
  
  d. 最后把/**/redis/src/下的win32fixes.c放到项目目录下(即main.cpp文件所在位置)
  

2.使用:



#include
#include
#include
#include
#include
#include
#include "hiredis.h"
void doTest()
{
//redis默认监听端口为6387 可以再配置文件中修改
redisContext* c = redisConnect("127.0.0.1", 6379);
if ( c->err)
{
printf("Connect to redisServer faile:%s\n",c->errstr);
redisFree(c);
return ;
}
printf("Connect to redisServer Success\n");
const char* command1 = "set stest1 value1";
redisReply* r = (redisReply*)redisCommand(c, command1);
if( NULL == r)
{
printf("Execut command1 failure\n");
redisFree(c);
return;
}
if( !(r->type == REDIS_REPLY_STATUS && (strcmp(r->str,"OK")==0 || strcmp(r->str,"ok")==0 ) ))
{
printf("Failed to execute command[%s]\n",command1);
freeReplyObject(r);
redisFree(c);
return;
}   
freeReplyObject(r);
printf("Succeed to execute command[%s]\n", command1);
const char* command2 = "strlen stest1";
r = (redisReply*)redisCommand(c, command2);
if ( r->type != REDIS_REPLY_INTEGER)
{
printf("Failed to execute command[%s]\n",command2);
freeReplyObject(r);
redisFree(c);
return;
}
int length =  r->integer;
freeReplyObject(r);
printf("The length of 'stest1' is %d.\n", length);
printf("Succeed to execute command[%s]\n", command2);

const char* command3 = "get stest1";
r = (redisReply*)redisCommand(c, command3);
if ( r->type != REDIS_REPLY_STRING)
{
printf("Failed to execute command[%s]\n",command3);
freeReplyObject(r);
redisFree(c);
return;
}
printf("The value of 'stest1' is %s\n", r->str);
freeReplyObject(r);
printf("Succeed to execute command[%s]\n", command3);
const char* command4 = "get stest2";
r = (redisReply*)redisCommand(c, command4);
if ( r->type != REDIS_REPLY_NIL)
{
printf("Failed to execute command[%s]\n",command4);
freeReplyObject(r);
redisFree(c);
return;
}
freeReplyObject(r);
printf("Succeed to execute command[%s]\n", command4);   

redisFree(c);
}
int main()
{
WSADATA wsaData;
int nRet;
if((nRet = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0){
printf("WSAStartup failed\n");
exit(0);
}
doTest();
return 0;
}
  
  
  redis C接口hiredis 简单函数使用介绍:http://www.iyunv.com/sixbeauty/p/3955581.html
  参考:
  Redis在Windows下编译 :http://blog.chinaunix.net/uid-15063109-id-3063848.html
  Redis在Windows上编译(Visual C++2010):http://blog.sina.com.cn/s/blog_73c52fda01011c72.html
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88340-1-1.html 上篇帖子: redis资料汇总 下篇帖子: redis在.net架构中的应用(2)--并发和原子操作不可兼得
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表