天天看点

Hiredis_API说明



同步的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,

b.获取命令的输出结果

int redisGetReply(redisContext *c, void **reply);

c.释放输出结果

例子:

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

订阅模式:

reply = redisCommand(context,"SUBSCRIBE test");

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) {

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(

    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);

继续阅读