您的位置:首页 > 数据库 > Redis

Qt VS2013_Qt_Redis的配置

2017-03-18 22:28 351 查看
本文参考教程:http://www.cnblogs.com/raker/p/4368741.html感谢作者分享。

 

一、下载redis源代码。

1.1 下载源码

通过https://github.com/MSOpenTech/redis
下载源码。

 


也可以通过我个人的云盘下载。
http://pan.baidu.com/s/1skBtc4l
 

二、编译reids库

2.1 编译源码

(1)下载源码后解压到本地磁盘(我放到C:/WorkSpace/目录下)。

 


(2) 使用vs2013打开redis-3.0/msvc/RedisServer.sln。

 


(3) 相关配置

点击菜单栏中【PROJECT】->【Properties】->【Configuration
Properties】->【C/C++】->【Runtime
Library】->【Multi-threaded Debug DLL(/MDd)】,点击确定。

注:因为需要在Qt工程中使用redis,所以这里需要选择MDd类型。如果是其他类型的工程这里的选项可能不同。

 


(4) 根据实际需求,选择相应的版本Debug/Release、x86/x64

 


(5) 构建所有项目,成功构建9个项目。

 


编译后生成文件如下(还有很多obj文件,为了方便截图被我删除掉了)

 


 

(6) 图中有5个exe可执行文件,分别是:

redis-server:Redis服务器的daemon启动程序

redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作

redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能

redis-check-aof:数据修复

redis-check-dump:检查导出工具

(6) 打包文件

在C:/WorkSpace目录下手动创建目录【redis】,进入redis目录创建两个子目录【include】【lib】【bin】

将上图中的hiredis.lib和Win32_Interop.lib放到刚刚创建的【lib】目录中。

复制redis源码目录中src目录下的Win32_Interop目录到【include】目录中,复制deps下的hiredis目录到【include】目录下(使用src文件夹下的fmacros.h替换掉hiredis目录中的fmacros.h文件)。

复制src/Win32_Interop/win32fixes.c到自己的工程目录。

 

 

2..3 双击运行RedisServer.exe启动服务端

 


 

三、在Qt项目中配置redis

 

3.1新建QtGUI工程(我的工程路径放在C:\WorkSpace\目录下)

 


 

3.2 在工程中添加redis配置配置

 


 

 




测试代码如下。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "hiredis\hiredis.h"

#define NO_QFORKIMPL //这一行必须加才能正常使用

#include "Win32_Interop\win32fixes.h"

#pragma comment(lib,"hiredis.lib")

#pragma comment(lib,"Win32_Interop.lib")

#include <QApplication>

#include <QDebug>

int main(int argc, char* argv[])

{

    QApplication app(argc, argv);

    struct timeval timeout = { 1, 500000 }; // 1.5 seconds

    redisContext *c = redisConnectWithTimeout((char*)"127.0.0.1", 6379, timeout);

    if (c->err)

    {

        qDebug()<<"Connection error: %s\n"<<c->errstr;

        exit(1);

    }

    /* PING server */

    redisReply *reply = (redisReply *)redisCommand(c, "PING");

    qDebug()<<"PING: "<< reply->str;

    freeReplyObject(reply);

    /* Set a key */

    reply = (redisReply *)redisCommand(c, "SET %s %s", "foo", "hello world");

    qDebug() << "SET: "<< reply->str;

    freeReplyObject(reply);

    /* Set a key using binary safe API */

    reply = (redisReply *)redisCommand(c, "SET %b %b", "bar", 3, "hello", 5);

    qDebug()<< "SET (binary API): "<<reply->str;

    freeReplyObject(reply);

    /* Try a GET and two INCR */

    reply = (redisReply *)redisCommand(c, "GET foo");

    qDebug()<<"GET foo: "<<reply->str;

    freeReplyObject(reply);

    reply = (redisReply *)redisCommand(c, "INCR counter");

    qDebug()<<"INCR counter: %lld\n"<<reply->integer;

    freeReplyObject(reply);

    /* again ... */

    reply = (redisReply *)redisCommand(c, "INCR counter");

    qDebug()<<"INCR counter: %lld\n"<< reply->integer;

    freeReplyObject(reply);

    /* Create a list of numbers, from 0 to 9 */

    reply = (redisReply *)redisCommand(c, "DEL mylist");

    freeReplyObject(reply);

    for (unsigned int j = 0; j < 10; j++)

    {

        char buf[64];

        sprintf_s(buf, 64, "%d", j);

        reply = (redisReply *)redisCommand(c, "LPUSH mylist element-%s", buf);

        freeReplyObject(reply);

    }

    /* Let's check what we have inside the list */

    reply = (redisReply *)redisCommand(c, "LRANGE mylist 0 -1");

    if (reply->type == REDIS_REPLY_ARRAY)

    {

        for (unsigned int j = 0; j < reply->elements; j++)

        {

            qDebug() << j << reply->element[j]->str;

            getchar();

        }

    }

    freeReplyObject(reply);

    return app.exec();

}
编译报错如下:

 


双击错误提示跳到hiredis.h文件中,修改包含头文件的路径。

 


 

运行效果下如:



四、修改redis配置文件,根目录下的redis.conf文件

参数介绍:

daemonize:是否以后台daemon方式运行

pidfile:pid文件位置

port:监听的端口号

timeout:请求超时时间

loglevel:log信息级别

logfile:log文件位置

databases:开启数据库的数量

save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。

rdbcompression:是否使用压缩

dbfilename:数据快照文件名(只是文件名,不包括目录)

dir:数据快照的保存目录(这个是目录)

appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。

appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: