C++学习记录:C++连接Redis数据库
之前学习了Redis数据库相关的内容,但是并没有在编写C++代码中用到Redis相关内容。
本篇笔记记录了个人在 Linux 环境下使用 C++ 连接 Redis 数据库的过程。实现了一个简单的排行榜功能。
由于现在的主流是使用 java 连接 redis,所以在网上查询 C语言 的API消耗了一部分时间,在本篇笔记中,我将记录相关数据结构和API的使用方法。
一、基础准备
1. 找到hiredis.h
一般来讲,这个文件在你的redis文件夹下deps/hiredis
目录中。将其include
到源码中即可使用redis的API。
2. 编译并且连接库
此时可以尝试写一个基础代码,随后编译。例如:
1 | /*此文件位于redis文件夹下 test.cpp*/ |
随后编译:
1 | g++ test.cpp -o test -l hiredis |
若可以正常编译,则说明没问题。若是提示找不到hiredis库文件,则按下面进行操作:
1 | //首先进入redis文件夹中,安装 |
随后即可正常编译。
3. 运行
找到上面编译生成的文件,运行,若成功执行即可跳过本节内容。
若提示找不到链接文件,则说明动态库无法被正确连接。则按下面步骤操作:
1 | //进入动态库链接文件 |
随后即可正常运行编译生成的文件。
二、代码相关
1. 常用
- 建立redis连接
1
2
3
4
5redisContext* myredis = redisConnect("127.0.0.1",6379);
/*
如果 myredis->err = true,则说明连接失败
字符串 myredis->errstr 即为失败原因
*/ - 执行redis语句并接收结果
1
2
3
4redisReply* reply = (redisReply*)redisCommand(myredis, "set zzz 1");
/*
语句执行的结果,储存在 redisReply结构体类型 的 reply 中
*/ - 释放reply结构体
1
freeReplyObject(reply);
- 断开redis连接
1
redisFree(myredis);
2. redisReply
结构体
我感觉这算是redis相关内容中比较重要的内容了,语句执行的结果全在这个结构体中。
- 下面是这个结构体的定义:
1 | typedef struct redisReply { |
- type的类型
1 | REDIS_REPLY_STRING: 1 |
我们首先通过type
来确认返回值的类型:
- 返回值为1即为字符串,通过
reply->str
获取。 - 返回值为2即为数组,通过
reply->element
获取到redisReply数组,再遍历该数组,通过type
正确获取其中信息。 - 返回值为3即为数字,通过
reply->integer
获取。 - 返回值为4即为空。
- 返回值为5即为执行语句的状态,通过
reply->str
获取,若结果为”OK”即为成功执行。 - 返回值为6即为执行错误。
返回值的类型和执行语句的类型是相关的,例如我执行get
命令,则type
应该为1;若我执行zrevrange
命令,则type
应该为2。在下文中,我简单实现了一个排行榜功能,其中使用的结构为sorted_set
,则其返回的排行榜结果type
应为2,通过遍历其element
数组,即可获取排行榜信息。
三、一个简单的排行榜demo
1. 思路
简单来说就是获取key和范围,使用sprintf
拼接redis查询语句,通过返回的redisReply
结构体输出结果。
2. 代码
1 | #include<iostream> |
3. 执行结果
(上为不带分数 下为带分数)