开发者社区> xumaojun> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Hiredis_API说明

简介:  同步的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核心内容详解
37 0
Redis详解(四)------ redis的底层数据结构
  上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中,这几种数据类型底层是由什么数据结构构造的呢?本篇博客我们就来详细介绍Redis中五大数据类型的底层实现。 1、演示数据类型的实现   上篇博客我们在介绍 key 相关命令的时候,介绍了如下命令: OBJECT ENCODING key   该命令是用来显示那五大数据类型的底层数据结构。
1799 0
linux安装redis内存数据库
应用场景 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
848 0
【Web API系列教程】3.9 — 实战:处理数据(添加新条目到数据库)
在本节,你将添加让用户可以创建新book的功能。在app.js中,添加如下代码到视图模型: self.authors = ko.
859 0
DevExpress控件使用之RichEditControl的使用
原文:DevExpress控件使用之RichEditControl的使用 做Winform的,我们一般都知道,传统.NET界面有一个RichTextBox控件,这个是一个富文本控件,可以存储图片文字等内容,它有自己的文件格式RTF,在DevExpress控件组里面也有一个同等的控件,他的名字是RichEditControl,这个控件功能很强大,在我上一篇随笔《Winform开发框架之通用短信邮件通知模块》中,有介绍过利用它来做邮件编辑器,实现图文并茂的邮件的功能,如下所示。
1520 0
+关注
xumaojun
乐于学习与分析
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载