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

整理自:http://www.mamicode.com/info-detail-501902.html

时间: 2024-12-27 08:45:26

redis内存数据库C客户端hiredis API 中文说明的相关文章

Redis内存数据库在Exchange会议室的应用

本文论述了现有Exchange会议室应用现状和不足之处,并详细介绍了Redis内存数据库在Exchange会议室的应用,并给出了一种高性能的应用架构及采用关键技术和关键实现过程,最终实现大幅改进系统性能和改善用户体验,并为其他信息系统的优化提供了有效参考. 一.Redis内存数据库简介 Key-Value 存储系统是当下比较流行的话题,尤其在构建诸如搜索引擎.即时通讯.P2P.游戏服务器.SNS等大型互联网应用以及提供云计算服务的时候有着大量的实际应用. Key-Value 存储系统更加注重对海

Redis内存数据库在Exchange会议室的整体应用架构

注:本文是别人写的,感觉写得很好就转过来,版权归原作者所有哦,谁知道出处可以告诉我,谢谢. 根据以上的会议室应用现状分析,该架构的核心是把历史发生的会议室申请数据定时同步到Redis内存数据库中,对于现在和未来时间的会议室数据(目前可以提前7天申请数据)则通过专用接口在Exchange会议室数据库实时查询,根据用户选择查询时间,系统自动判断访问哪个数据库或进行数据合并(历史数据与现在或未来时间的数据),通过减少访问Exchange会议室数据库以提高查询性能,从而大大改善用户体验,通过与Windo

Redis介绍 && Java客户端操作Redis

Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.17 64bit JDK1.6 redis介绍 大多数时候,我们都将 redis 称作是内存数据库,它在运行过程中,将键值对信息存储在内存中,同时在后台以异步的形式写入本地数据库中(默认是:dump.rdb,在 redis.conf 中配置,如果需要考虑安全的持久化需求需要开启 AOF 功能,详细介绍可以查看这

Redis内存数据库在Exchange会议室的应用(转)

本文论述了现有Exchange会议室应用现状和不足之处,并详细介绍了Redis内存数据库在Exchange会议室的应用,并给出了一种高性能的应用架构及采用关键技术和关键实现过程,最终实现大幅改进系统性能和改善用户体验,并为其他信息系统的优化提供了有效参考. 一.Redis内存数据库简介 Key-Value 存储系统是当下比较流行的话题,尤其在构建诸如搜索引擎.即时通讯.P2P.游戏服务器.SNS等大型互联网应用以及提供云计算服务的时候有着大量的实际应用. Key-Value 存储系统更加注重对海

Tedis:淘宝的Redis的Java客户端开发包

http://www.open-open.com/lib/view/open1389880631976.html Tedis Tedis是另一个redis的java客户端 Tedis的目标是打造一个可在生产环境直接使用的高可用Redis解决方案.参见https://github.com/alibaba/tb_tddl Feature 高可用,Tedis使用多写随机读做HA确保redis的高可用 高性能,使用特殊的线程模型,使redis的性能不限制在客户端 多种使用方式,如果你只有一个redis实

Redis的Python客户端redis-py的初步使用

1. 安装 sudo pip install redis sudo pip install hiredis Parser可以控制如何解析redis响应的内容.redis-py包含两个Parser类,PythonParser和HiredisParser.默认,如果已经安装了hiredis模块,redis-py会使用HiredisParser,否则会使用PythonParser.HiredisParser是C编写的,由redis核心团队维护,性能要比PythonParser提高10倍以上,所以推荐使

PHP-redis api 中文说明(转)

来源 : http://hi.baidu.com/gaolamp/item/1686aac07334bd0f0ad93a9f PHP-redis api 中文说明 phpredis 是 php 的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务 关系,很有用,以下是 redis 官方提供的命令使用技巧: 下载地址如下: https://github.com/owlient/phpredis(支持 redis 2.0.4) Redis::__construct 构造函数 $redis

基于redis 内存数据库简单使用

在ecplise中使用内存数据的客端户,前提要准备要下载两个jar包 commons-pool2-2.0.jar jedis-2.4.2.jar 前提准备做好了,那我们就开启redis的服务,打开一个命令窗口输入如下命令:redis-server  或redis-server  redis根目\redis.conf 服务器已经开启了,注意端号是6377 2.在eclipse 创建一个项目,把redist需要的包导入项目中 3.写一个Jedis工具类 public class JedisUtil 

(一)初识Redis内存数据库

什么是Redis内存数据库? Redis,本质上上一个KEY-VALUE类型的内存数据库,整个数据库都加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存.因此它是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作.虽然是内存数据库,但是其数据可以持久化,而且支持丰富的数据类型. Redis支持保存LIST列表和SET集合的数据结构,而且还支持对LIST进行各种操作,例如从LIST两端进行PUSH和POP数据,取LIST区间,排序等等.对SET支持各