Hiredis_API说明

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 同步的API接口redisContext *redisConnect(const char *ip, int port);void *redisCommand(redisContext *c, const char *format, .

同步的API接口
redisContext *redisConnect(const char *ip, int port);
void *redisCommand(redisContext *c, const char *format, ...);
void freeReplyObject(void *reply);

1)建立连接
redisContext *c = redisConnect("127.0.0.1", 6379);
if (c != NULL && c->err) {
        printf("Error: %s\n", c->errstr);
            // handle error
}

redisConnect函数用来创建一个叫redisContext的东西,它包含了连接相关的信息
它里面有个err字段,0表示正常,其他表示出错了!通过errstr字段可以知晓错误信息

2)执行命令
reply = redisCommand(context, "SET key value");
reply = redisCommand(context, "SET key %s", value);
reply = redisCommand(context, "SET key %b", value, (size_t) valuelen);
reply = redisCommand(context, "SET key:%s %s", myid, value);
redisCommand的调用格式类似printf函数,上面的第二条调用语句的作用在于
输入二进制格式的value内容,其后必须表明二进制的字节长度!


3)redisCommand函数返回一个东西叫redisReply,我们需要通过判断它的type字段
来知道返回了具体什么样的内容:
REDIS_REPLY_STATUS      表示状态,内容通过str字段查看,字符串长度是len字段
REDIS_REPLY_ERROR       表示出错,查看出错信息,如上的str,len字段
REDIS_REPLY_INTEGER    返回整数,从integer字段获取值
REDIS_REPLY_NIL            没有数据返回
REDIS_REPLY_STRING      返回字符串,查看str,len字段
REDIS_REPLY_ARRAY       返回一个数组,查看elements的值(数组个数),通过
                                      element[index]的方式访问数组元素,每个数组元素是
                                      一个redisReply对象的指针

4)另外有一个类似的函数,批量执行命令:
void *redisCommandArgv(redisContext *c, int argc,
    const char **argv, const size_t *argvlen);

5)redisReply使用完毕后,需要使用函数freeReplyObject进行释放销毁
void redisFree(redisContext *c)的作用是断开连接,并释放redisContext的内容

6)redisCommand的函数执行流程说明:
a.格式化redis command
b.格式化后的命令内容放入redisContext的输出缓冲区
c.调用redisGetReply函数执行命令,得到结果

7)管道的使用方式:
a.填入需要执行的命令
void redisAppendCommand(redisContext *c, const char *format, ...);
void redisAppendCommandArgv(redisContext *c, int argc,
    const char **argv, const size_t *argvlen);
b.获取命令的输出结果
int redisGetReply(redisContext *c, void **reply);
c.释放输出结果
void freeReplyObject(void *reply);

例子:
redisReply *reply = NULL;
redisAppendCommand(context,"set key1 value");
redisAppendCommand(context,"get key2");
redisGetReply(context,&reply); // reply for set
freeReplyObject(reply);
redisGetReply(context,&reply); // reply for get
freeReplyObject(reply);

订阅模式:
reply = redisCommand(context,"SUBSCRIBE test");
freeReplyObject(reply);
while(redisGetReply(context,&reply) == REDIS_OK) {
        // consume message
        freeReplyObject(reply);
}

8)redisReply返回结果处理:
REDIS_OK                    正常
REDIS_ERR_IO          IO读/写出现异常,通过errno查看原因
REDIS_ERR_EOF            服务器关闭了链接,读结束
REDIS_ERR_PROTOCOL  分析redis协议内容出错
EDIS_ERR_OTHER          其他未知的错误
上述错误类型都可以通过redisReply的errstr字段查看简短的描述

C)异步API(异步API的使用方式和同步API差不多,在这儿列出不同的函数吧)
1.连接redis服务器
redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
if (c->err) {
        printf("Error: %s\n", c->errstr);
            // handle error
}

2.设置连接、断开的钩子函数
int redisAsyncSetConnectCallback(redisAsyncContext *ac,
        redisConnectCallback *fn);
int redisAsyncSetDisconnectCallback(redisAsyncContext *ac,
    redisDisconnectCallback *fn);

3.插入命令信息
int redisAsyncCommand(
    redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,
    const char *format, ...);
int redisAsyncCommandArgv(
    redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,
    int argc, const char **argv, const size_t *argvlen);
获取命令输出和同步API相同


4.关闭连接
void redisAsyncDisconnect(redisAsyncContext *ac);


D)辅助API
下面的API主要用于其他编程语言绑定的术后,可以读取分析数据
redisReader *redisReaderCreate(void);
void redisReaderFree(redisReader *reader);
int redisReaderFeed(redisReader *reader, const char *buf, size_t len);
int redisReaderGetReply(redisReader *reader, void **reply);

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
8月前
|
API 索引
Freetype 基本的API调用
如您所见,该函数返回一个错误代码,例如 FreeType API 的大多数其他函数。错误代码 的 0表示 操作成功;否则,该值描述 错误,并设置library为 NULL。
107 0
|
10月前
|
JSON 监控 网络协议
针对podman REST API 的curl调用-2
针对podman REST API 的curl调用-2
109 0
针对podman REST API 的curl调用-2
|
10月前
|
API 开发工具
|
Shell API Python
OS库常用API讲解
OS库常用API讲解
246 0
|
编解码 API 数据处理
FFmpeg的API库介绍
FFmpeg的API库介绍
219 0
|
编解码 API 容器
FFmpeg基础API
FFmpeg基础API
211 0
|
机器学习/深度学习 JSON 文字识别
|
存储 编解码 算法
FFmpeg libswscale源码分析1-API介绍
libswscale 是 FFmpeg 中完成图像尺寸缩放和像素格式转换的库。用户可以编写程序,调用 libswscale 提供的 API 来进行图像尺寸缩放和像素格式转换。也可以使用 scale 滤镜完成这些功能,scale 滤镜实现中调用了 libswscale 的 API。libswscale 的 API 非常简单,就一个 sws_scale() 接口,但内部的实现却非常复杂。
330 0
FFmpeg libswscale源码分析1-API介绍
|
API 区块链 网络协议
Tendermint JSONRPC API中文手册
Tendermint RPC API文档中文版由汇智网翻译整理,访问地址:http://cw.hubwiz.com/card/c/tendermint-rpc-api/。 配置:可以使用配置文件 $TMHOME/config/config.toml或使用命令行参数--rpc.X 来调整terdernmint节点的rpc功能。
8114 0