文章目录
- 简介
- 一、找到要使用的开源库
- 二、`VS2019`编译`hiredis`
- 三、`VS2019`编译`redis-plus-plus`
- 四、测试库
- 五、本文解决方案下载
- win_redis.7z
简介
一、找到要使用的开源库
为了测试在VS2019
下用c++
开发的客户端代码,可以选择一款官方推荐的c++
客户端开源库。
先去官方的客户端主页看看:https://redis.io/clients#c-plus-plus
看到如下信息:
找到c++客户端中看看有没有这个标志的。
找到唯一一个:redis-plus-plus
点那个树杈形状的链接,浏览到redis-plus-plus
的github
主页,看到这个:
要求hiredis v0.12.1
以上的版本,推荐最终发布的稳定版。
要先搞定hiredis
在vs2019
的编译!
之前Windows
搭建redis
服务器的时候(参见文章搭建windows下redis哨兵模式和搭建windows下简易的redis集群环境),留意过Redis-x64-5.0.10 for Windows
版本,上面是有源码的,里面也包含了hiredis
。
源码的下载地址是:https://github.com/tporadowski/redis/releases
把Redis-x64-5.0.10 for Windows
和redis-plus-plus都下载下来。
二、VS2019
编译hiredis
新建目录win_redis
,redis-5.0.10.zip
解压到目录中。
里面的msvc
目录直接有vs的sln
文件,用vs2019
打开这个解决方案文件。
我们目的是只想编译hiredis
,得到库文件。可执行文件redis-server.exe
和redis-cli.exe
直接下载Redis-x64-5.0.10.zip
就有了,可以不编译。
而且打开hiredis.h
文件,看到版本号是0.13,满足redis-plus-plus
要求的hiredis v0.12.1
以上的版本。
干脆把整个工程都编译一下吧!
编译过程问题解决:(如果只编译hiredis
库则不会有问题)
- 编译问题1
\win_redis\redis-5.0.10\src\release.c(44,10): fatal error C1083: 无法打开包括文件: “release.h”: No such file or directory
解决:参考redis-3.0.zip
的release.c
,改一下源代码:
在文件开头
#include <string.h>
#include "release.h"
#include "version.h"
#include "crc64.h"
改为:
#ifdef _WIN32
#include "Win32_Interop/Win32_Portability.h"
#define REDIS_GIT_SHA1 "00000000" /* TODO: Modify build to write them to release.h from the environment */
#define REDIS_GIT_DIRTY "0"
#define REDIS_BUILD_ID "0000"
#endif
#include <string.h>
POSIX_ONLY(#include "release.h")
#include "version.h"
#include "crc64.h"
重新编译项目,出现问题2。
- 编译问题2
这个问题可以不管,编译已经成功了。
如果要解决:关闭VS2019
,右键菜单,然后用管理者模式打开VS2019
,打开解决方案,编译通过。
或者设置一下:
之后编译成功。
为了项目开发业务程序方便引用库,可以设置项目生成的库文件都输出到msvc
的lib
目录,exe
文件都输出到msvc
的bin
目录中。
lib
以hiredis
项目为例,设置是:
exe
项目以RedisServer
项目设置为例,设置是:
重新编译成功,看到lib
文件都输出到msvc
的lib
目录,exe
文件都输出到msvc
的bin
目录中
三、VS2019
编译redis-plus-plus
redis-plus-plus
是CMAKE
的项目,VS2019
本来支持直接打开文件夹的方式编译CMAKE
项目的,但是我试了这个项目,虽然可以直接编译出lib文件,但是没有产生VS2019
的工程文件。
所以直接下载最新的CMAKE
安装,然后配置、产生VS2019
的项目文件,再用VS2019
打开项目文件编译。
从https://cmake.org/download/下载CMAKE
最新版本cmake-3.19.1-win64-x64.msi
安装时,加入到环境变量中,安装完成后,就可以操作redis-plus-plus
。
首先下载的redis-plus-plus-master.zip
解压到win_redis
的deps
目录,和hiredis
放到同一级别目录中,如下图。
启动CMAKE
,操作这个目录。
如下图设置:
源文件目录选择deps
中的redis-plus-plus-master
目录;build
目录选择在msvc
中新建的redis-plus-plus-master
目录;然后点击Configure
按键,弹出的界面如下图配置。
Finish
之后,出现错误提示,不管它,修改配置界面,如下图:
Debug;Release;MinSizeRel;RelWithDebInfo
改为Debug;Release
。
然后点Configure
按键,注意,每点击1次都会提示错误,但是界面都会有变化,错误之后再点击Configure
按键,我是重复了7、8次之后,出现了如下的界面:
配置HIREDIS_HEADER、HIREDIS_STATIC_LIB
,配置到上面编译好的hiredis
的头文件和库文件夹中,SHARED
库、TEST
、TLS
都不勾选,然后再点Configure
按键,如下图。
然后Generate按键生成VS项目。目录中能看到解决方案和项目文件了,如下图:
在之前编译hiredis
的解决方案中,增加这个存在的redis-plus-plus-static.vcxproj
项目,如下图:
在VS2019
中修改配置,因为CMAKE配置头文件和库的时候使用了绝对路径,可以修改成使用VS的环境变量,目录搬移时也可以兼容,如下图:
注意:这里运行库用MTd
是因为,之前的编译hiredis
的项目用了MT
或者MTd
的,所以要一致。
编译成功!
四、测试库
解决方案中新建项目redis++_demo
,注意运行库设置也要是MTd
或者MT
的,头文件要包含hiredis
和redis-plus-plus
的头文件,要连接库文件hiredis.lib
、redis++.lib
、Win32_Interop.lib
。
源代码如下:
#include <sw/redis++/redis++.h>
#include <iostream>
#include <cstdio>
#include <unordered_set>
#include <Windows.h>
using namespace sw::redis;
int main(int argc, char** argv)
{
try {
Redis redis = Redis("tcp://127.0.0.1:6379");
redis.set("key", "Test redis-cplus-cplus");
OptionalString val = redis.get("key");
if (val) {
std::cout << *val << std::endl;
}
}
catch (const Error& e) {
}
return 0;
}
先执行redis-server.exe
服务,端口使用默认的6379,编译这个程序并执行后,结果如下:
五、本文解决方案下载