Redis使用(1)

来源:互联网 发布:淘宝买家评价修改 编辑:程序博客网 时间:2024/05/22 22:12

最近需要学习redis,学习新技术都是有步骤的。先问自己几个问题(1.  Redis到底是什么? 2. Redis有什么作用? 3.如何使用Redis)


1. Redis是什么?

Redis全称为 Remote dictionary server。

百度百科上面是这样写的“Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API”。 这里我们知道Redis是数据库,它和MySql有什么区别,就我目前所知道的,redist的全部数据都是在内存里面,而 mysql的数据是写到磁盘上面的, 读写内存IO的速度是快于磁盘IO的。因此需要使用 redis作为mysql的缓存。当然除了redis之外,常见的缓存服务器还有ehcache, memcache等。


// Begin--2015/4/10

最近一直在想redis是No SQL的数据库, 那么什么是No SQL数据库, 这和传统的mysql, sql server, DB2类型的数据库有什么区别? 传统的数据库保存的文件是在磁盘, 需要将数据放到磁盘来保存, 但是cpu对磁盘IO的速度比对内存的访问速度慢很多. 由于过去CPU价格昂贵, SQL类型的数据虽然效率低下但是也很常用, 但是今年来内存价格降低, 并且系统对数据库访问的频率变高, 因此需要将数据库保存在内存中,因此出现了No Sql类型的数据库.


参考:http://www.dataguru.cn/forum.php?mod=viewthread&tid=283001

// End--2015/4/10


2. 编译Redis

按照下面的帖子就可以搞定了, 但是这步“下载redis24_win_uv.patch”,我下载不下来,我就直接使用编译可通过的包里面该文件了。

参考:http://blog.csdn.net/oldmtn/article/details/44804643

3. 使用redis

链接:   http://blog.csdn.net/wf1982/article/details/7208979

我总结一下,就是去官网下载redis, 我下载的是redis-3.0.0.tar.gz.

在Linux下解压缩后, 执行make和make install, 在/usr/loca/bin下会有redis-server, redis-cli等可执行程序.


a. 启动本地redis


参考:

1. windows下使用c++调用redis

地址:http://www.cnblogs.com/sixbeauty/p/3954199.html?utm_source=tuicool


redis疑难杂症



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

不废话,unix下c++调用 redis可以看这个:

http://blog.csdn.net/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.csdn.net/detail/biantaiwangzi/7864413

==========================================================================================

1.首先要先配置好git ,详细的内容在这里:http://www.cnblogs.com/sixbeauty/p/3954223.html

 

2.新建一个文件夹(名为redis_build好了),打开cmd,cd进去,使用git弄一个antirez/redis的备份。

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

 

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

1
2
cd redis
git checkout 3fac86ff1d
1
git checkout -b 2.4_win_uv

 

4.下载redis24_win_uv.patch,(其实就是英文说明最下面那个。)必须要先下载才能执行成功。

把 (redis24_win_uv.patch) 拉到之前创建的目录redis_bulid下的redis里面,执行:

1
git am redis24_win_uv.patch

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

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

  

5.继续执行:

1
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 <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


0 0
原创粉丝点击