redis内存数据库C客户端hiredis API 中文说明
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", );
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", );
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 ;
}
整理自:http://www.mamicode.com/info-detail-501902.html
redis内存数据库C客户端hiredis API 中文说明的更多相关文章
- Redis学习之路(005)- redis内存数据库C客户端hiredis API 中文说明
A)编译安装 make make install (/usr/local) make install PREFIX=$HOME/progs(可以自由指定安装路径) B)同步的API接口 redisCo ...
- redis的ruby客户端(三)
1. 介绍 clients这里列出了redis所支持的语言的所有客户端程序,其中就有ruby的.有这么多的客户端,说明要实现redis的客户端是不难的.其实你只要掌握一种语言的socket编程就可以实 ...
- Redis内存数据库在Exchange会议室的应用
本文论述了现有Exchange会议室应用现状和不足之处,并详细介绍了Redis内存数据库在Exchange会议室的应用,并给出了一种高性能的应用架构及采用关键技术和关键实现过程,最终实现大幅改进系统性 ...
- Redis的Python客户端redis-py说明文档(转)
add by zhj: 对Publish / Subscribe,LUA Scripting,Sentinel support,Scan Iterators等部分没有翻译,需要的用户参见英文原文吧.另 ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- Redis学习总结(1)——Redis内存数据库详细教程
1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – 简介 8.redis数 ...
- Redis内存数据库在Exchange会议室的整体应用架构
注:本文是别人写的,感觉写得很好就转过来,版权归原作者所有哦,谁知道出处可以告诉我,谢谢. 根据以上的会议室应用现状分析,该架构的核心是把历史发生的会议室申请数据定时同步到Redis内存数据库中,对于 ...
- Redis的Python客户端redis-py的初步使用
1. Redis的安装 sudo pip install redis sudo pip install hiredis Parser可以控制如何解析redis响应的内容.redis-py包含两个Par ...
- Java Servlet API中文说明文档
Java Servlet API中文说明文档 目 录 1.... Servet资料 1.1 绪言 1.2 谁需要读这份文档 1.3 Java Servlet API的组成 ...
随机推荐
- angular4在prod模式下的JIT编译问题
最近利用angular4开发一个项目,由于画面中的显示都是从数据表中读取,通过设置显示FLAG和显示顺序对画面布局按既定规则控制的, 所以必须利用动态编译实现. 方法如下, 1,获取JitCompil ...
- lua版本的一个状态机
这个状态机http://www.cnblogs.com/flytrace/p/5587033.html的lua版本 -- LUA 有实现枚举值的好办法么 local sc_enum = { -- ev ...
- Redis进阶实践之九 独立封装的RedisClient客户端工具类
一.引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己写了两个工具类,但是这两个工具类,没有提供一致的接口,是为了使用的独立 ...
- redis 简易监控的几种方法
简介 针对Redis 实现性能监控的几种方法 一.使用info命令 命令说明 127.0.0.1:6380> info # Server redis_version:3.2.11 redis_g ...
- @RequestMapping注解
Spring MVC中用于参数绑定的注解有很多,都在org.springframework.web.bind.annotation包中,根据它们处理的request的不同内容部分可以分为四类(主要讲解 ...
- netstream播放rtmp直播流卡顿
标准的flash播放器ActionScript3语句,播放flash publish的rtmp流,NetConnection--->NetStream--->play--->atta ...
- [Cpp] 面向对象程序设计 C++
初始化列表(包括成员对象初始化) 初始化列表 ( 推荐 ) : 可以初始化任何类型的数据, 不管是不是普通类型还是对象,都建议用. 不再需要在构造器中赋值了, 而且初始化列表比构造函数要早执行. ...
- Java版网络爬虫基础
网络爬虫不仅仅可以爬取网站的网页,图片,甚至可以实现抢票功能,网上抢购,机票查询等.这几天看了点基础,记录下来. 网页的关系可以看做是一张很大的图,图的遍历可以分为深度优先和广度优先.网络爬虫采取的广 ...
- NOIP 2017 Day 0. 游记
刚从曲师大试机回来... 不巧,我抽到了和去年一样的考场,还是那么难用的XP,还是那么难用的键盘. 似乎在考场上有一股奇怪的力量,我本来在自己电脑上打板子打的没那么快,但是试机的那段时间..说出来你们 ...
- PLECS_直流电机基本系统模型
1.模型图 2.模型仿真结果 (1)Step阶跃t=1s,R=20Ω,V_dc = 120V,那么此时 电源电压波形: 电机电枢电流波形: 电机电磁转矩: 电机转速波形: (2)其他参数不变将R=30 ...