A)编译安装

make
make install (/usr/local)
make install PREFIX=$HOME/progs(可以自由指定安装路径)

B)同步的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);

官方例子:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hiredis.h> int main(int argc, char **argv) {
unsigned int j;
redisContext *c;
redisReply *reply;
const char *hostname = (argc > ) ? argv[] : "127.0.0.1";
int port = (argc > ) ? atoi(argv[]) : ;
struct timeval timeout = { , }; // 1.5 seconds
c = redisConnectWithTimeout(hostname, port, timeout);
if (c == NULL || c->err) {
if (c) {
printf("Connection error: %s\n", c->errstr);
redisFree(c);
} else {
printf("Connection error: can't allocate redis context\n");
}
exit();
} /* PING server */
reply = redisCommand(c,"PING");
printf("PING: %s\n", reply->str);
freeReplyObject(reply); /* Set a key */
reply = redisCommand(c,"SET %s %s", "foo", "hello world");
printf("SET: %s\n", reply->str);
freeReplyObject(reply); /* Set a key using binary safe API */
reply = redisCommand(c,"SET %b %b", "bar", (size_t) , "hello", (size_t) );
printf("SET (binary API): %s\n", reply->str);
freeReplyObject(reply); /* Try a GET and two INCR */
reply = redisCommand(c,"GET foo");
printf("GET foo: %s\n", reply->str);
freeReplyObject(reply);
reply = redisCommand(c,"INCR counter");
printf("INCR counter: %lld\n", reply->integer);
freeReplyObject(reply); /* again ... */
reply = redisCommand(c,"INCR counter");
printf("INCR counter: %lld\n", reply->integer);
freeReplyObject(reply); /* Create a list of numbers, from 0 to 9 */
reply = redisCommand(c,"DEL mylist");
freeReplyObject(reply);
for (j = ; j < ; j++) {
char buf[];
snprintf(buf,,"%d",j);
reply = redisCommand(c,"LPUSH mylist element-%s", buf);
freeReplyObject(reply);
} /* Let's check what we have inside the list */
reply = redisCommand(c,"LRANGE mylist 0 -1");
if (reply->type == REDIS_REPLY_ARRAY) {
for (j = ; j < reply->elements; j++) {
printf("%u) %s\n", j, reply->element[j]->str);
}
}
freeReplyObject(reply);
/* Disconnects and frees the context */
redisFree(c);
return ;
}

Redis学习之路(005)- redis内存数据库C客户端hiredis API 中文说明的更多相关文章

  1. redis内存数据库C客户端hiredis API 中文说明

    A)编译安装 make make install (/usr/local) make install PREFIX=$HOME/progs(可以自由指定安装路径) B)同步的API接口 redisCo ...

  2. Redis 学习之路 (010) - redis命令手册

    Redis 键(key) 命令 命令 描述 Redis DEL 命令 该命令用于在 key 存在是删除 key. Redis Dump 命令 序列化给定 key ,并返回被序列化的值. Redis E ...

  3. Redis 学习之路 (011) - redis 多数据库

    一台服务器上都快开启200个redis实例了,看着就崩溃了.这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开. 那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的 ...

  4. Redis学习之路(000)- 目录

    本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...

  5. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  6. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  7. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  8. C# Redis学习系列三:Redis配置主从

    Redis配置主从 主IP :端口      192.168.0.103 6666 从IP:端口       192.168.0.108 3333 配置从库 (1)安装服务: redis-server ...

  9. redis 学习(1)-- redis 安装与启动

    redis 学习(1)-- redis 安装与启动 redis 特性 关于 redis 的介绍网上已经有很多信息了,这里我就不在详细说明了.介绍一下几个鲜明特性: 1.速度快 官方称可以达到10W的q ...

随机推荐

  1. Netflix推荐系统:从评分预测到消费者法则

    http://in.sdo.com/?p=11 原文链接:Netflix recommendations: beyond the 5 stars (Part 1), (Part 2) 原文作者:Xav ...

  2. PHP Manager for IIS

    SOAP error on IIS8 Registering new PHP version sets bad values set for FastCGI activityTimeout, requ ...

  3. Downloading jQuery 3.2.1

    Downloading jQuery Compressed and uncompressed copies of jQuery files are available. The uncompresse ...

  4. ArcGIS 10.4的0x80040228许可错误

    今天,再次遇到这个问题,再忙得把它记录下来! AO/AE程序的许可方式 不管是开发环境是基于ArcObject还是基于ArcEngine,不管运行环境是Desktop还是Runtime(早已改名了为A ...

  5. SpringMVC框架使用注解执行定时任务(转)

    首先要配置我们的SpringMVC文件 xmlns 加下面的内容: xmlns:task="http://www.springframework.org/schema/task" ...

  6. Python小任务 - 如何编写指定时间执行的Python小程序

    我们在平时的工作中经常会遇到这样的需求,需要再某个时间点执行一段程序逻辑. 那么,在python中我们是怎么做的呢? 下面看代码: waitDesignatedTimeToRun.py import ...

  7. 保存html代码

    function svcode(F) { if (document.all) { var F = $id(F); var E = window.open("", "_bl ...

  8. 牛客网-《剑指offer》-调整数组顺序使奇数位于偶数前面

    题目:http://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593 C++ class Solution { public: vo ...

  9. 【推荐】ImageProcessor.Web,再也不用自己生成缩略图了

    1.什么是ImageProcessor.Web ImageProcessor.Web是基于ImageProcessor的web图像处理模块,允许开发者使用URL查询字符串参数的方式作为指令执行图像处理 ...

  10. hadoop-处理小文件

    一个Hadoop程序的优化过程 – 根据文件实际大小实现CombineFileInputFormat http://www.rigongyizu.com/hadoop-job-optimize-com ...