windows下使用c++調用redis

不廢話,unix下c++調用 redis能夠看這個:html

http://blog.csdn.net/youngqj/article/details/8266177

 ==================================================================================c++

redis的官網版本並無爲vc開發提供接口,不過微軟對redis好像很感興趣,本身弄了一個 ,完整的英文說明在這裏:git

https://gist.github.com/MS-Interop/1439660    根聽說明,一套完整下來,你就能夠本身搭一個VC版本的 redis。github

由於流程比較複雜,怕之後本身要用又忘記,趁記得寫下來。redis

==========================================================================================windows

下面的步驟其實就是要弄出  MSOpenTech/redis(https://github.com/MSOpenTech/redis)裏面的redis/msvs中的sln,連接中有下載,但我打不開,若是你能打開請無視下面的,直接使用。

或者下載這個:http://download.csdn.net/detail/biantaiwangzi/7864413curl

==========================================================================================函數

1.首先要先配置好git ,詳細的內容在這裏:http://www.cnblogs.com/sixbeauty/p/3954223.htmlui

 

2.新建一個文件夾(名爲redis_build好了),打開cmd,cd進去,使用git弄一個antirez/redis的備份。url

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.一、把pre-built.2的include複製到 pthreads-win32裏面。

  6.二、把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 <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdarg.h>
#include <string.h>
#include <assert.h>
#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.cnblogs.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

相關文章
相關標籤/搜索