问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hiredis 怎么创建多个数据库

发布网友 发布时间:2022-05-04 00:44

我来回答

2个回答

懂视网 时间:2022-05-04 05:06

异步API Hiredis 拥有一个套异步API方便与一些事件库协同工作. Hiredis的代码中涵盖了hiredis与libev和libevent这两个库结合使用的例子. 连接 函数 redisAsyncConnect 用来建立到redis服务器的非阻塞连接. 返回一个 redisAsyncContext 结构体指针. 因为建立

异步API

Hiredis 拥有一个套异步API方便与一些事件库协同工作. Hiredis的代码中涵盖了hiredis与libev和libevent这两个库结合使用的例子.

连接

函数 redisAsyncConnect 用来建立到redis服务器的非阻塞连接. 返回一个 redisAsyncContext 结构体指针. 因为建立的连接是非阻塞的,无法立即返回目标主机的ip和端口是否可达。所以在建立连接后,我们应该检查 err 成员,来确认连接是否存在错误。

redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
if (c->err) {
 printf("Error: %s
", c->errstr);
 // 错误处理
}

redisAsyncContext包含一个连接断开回调函数(主动断开,或者发生错误都会调用)。此函数原型如下:

void(const redisAsyncContext *c, int status);

当用户主动断开连接时, 参数 status 被设置为 REDIS_OK ; 当发生错误而导致连接断开时 status 被设置为REDIS_ERR 。此时我们可以根据 err 成员变量判断错误产生的情况。

当我们需要进行断线重连时,可以在断开连接回调函数处理。

每个上下文(redisAsyncContext)实例只能设置一次断线回调函数,多次调用会返回REDIS_ERR错误。 使用以下函数设置断线回调函数:

int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn);

发送命令并设置回调

使用redisAsyncContext时,(每帧)发送的命令会自动pipelined(打包发送命令)。所以我们需要设置reply回调函数来进行命令执行后的处理工作。回调函数原型如下:

void(redisAsyncContext *c, void *reply, void *privdata);

参数 privdata 为用户数据,你可以设置成函数调用时所需要的任意数据。

使用以下函数发送异步命令:

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

这两个函数和阻塞版本类似。命令成功添加到输出缓冲区时返回 REDIS_OK ,错误时返回 REDIS_ERR 。 例如:当连接被用户中断时,新命令无法被添加,所有类似 redisAsyncCommand 的函数调用都返回 REDIS_ERR错误码。

如果将回调函数设置成 NULL (? privdata,还是reply?需要实验一下 ?)内存被立即释放。当回调函数非空,则内存在调用后释放内存。reply参数只能在回调函数体中使用。

当上下文(redisAsyncContext)发生错误时所有未执行的命令所设置的回调函数都会被调用,回调函数中reply指针为空。

断开连接

异步连接可以使用以下函数终止:

void redisAsyncDisconnect(redisAsyncContext *ac);

当函数被调用时连接并不是立即被断开,而是新的命令不在被接受。(调用函数后)当所有未执行的指令都被写入到socket中,并且命令回调函数都被执行以后,连接才被中断(连接中断回调函数被调用,status为 REDIS_OK )、上下文对象被释放。.

绑定到事件库

There are a few hooks that need to be set on the context object after it is created. See the adapters/ directory for bindings to libev and libevent.

热心网友 时间:2022-05-04 02:14

之所以轻量,是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能。但正是由于这种设计,使得我们只要熟悉了通用的redis操作语句,就可以很容易的使用该库和redis数据库进行交互。
除了支持发送命令和接收应答/应答数据,它提供了对应答数据的解析操作。而且这个基于I/O层的数据流解析操作设计考虑到了复用性,可以对应答数据进行通用的解析操作。
Hirides仅仅支持二进制安全的redis协议,所以你只能针对版本号大于等于1.2.0的redis服务端使用。
Redis C语言客户端库hiredis包含多种API,包括同步命令操作API、异步命令操作API和对应答数据进行解析的API。
关于升级: 版本0.9.0是hiredis很多特性一次大的更新,但是对现有代码进行升级应该不会造成大的问题。升级时,要记住的关键一点是大于等于0.9.0的版本是使用redisContext*来保持连接状态,之前的版本只是使用了无状态的文件描述符。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找专业防水队做完还漏水怎么维权 法院会受理房屋漏水造成的纠纷吗? 巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 如何查看hibernate session是否关闭 java hibernate 注解 怎么获取session Hibernate的Session的lock方法和merge方法有什么区别 Hibernate中的session.clear(),save(),和flush()的理解? hibernate session的问题 Hibernate的Session hibernate中session与JSP中session的区别是什么? Hibernate中的session和httpsession什么区别?? hibernate怎么判断session是否关闭 hibernate session 什么时候关闭 hibernate的session不手动关闭会不会自动关闭 hibernate为什么要有session 在hibernate中,session的作用是什么,怎么用呢,谢谢各位大虾了。 hibernate中的session指的是什么 hibernate中的session指的是什么?可否将单个的session在多个线程间进行共享 Hibernate中Session什么意思? sap hana 收费吗 《saphana实战》pdf下载在线阅读全文,求百度网盘云资源 hana的应用软件 sap hana 为什么抛弃oracle hiredis支持lua调用吗 hiredis 能用在3.0版本 redis集群吗 windows hiredis能访问linux的redis吗 关系型数据库中存储过程的用户接口有哪些 我国企业供应链管理信息系统的现状 想兼职做一些企业报表, 数据库开发, 企业ERP接口扩展方面的工作, 好找吗? +什么是反向键索引+反向键索引原理+创建反向键索引 如何建立高效的反向索引 在什么样的环境下需要建立反向键索引 SQLSERVER2000中能不能建立反向索引 SQL如何建立倒序索引 搜索引擎如何建立索引 什么是正向索引? mongodb 分页查询 需要自动增加ID吗 如何设置zookeeper的JVM内存 如何定期自动删除归档日志 怎么合理的删除归档日志 使用RMAN备份时应如何处置归档日志文件 disabled 和unable 的区别? unable和disabled的区别,比如是什么词性……一般在句子中作哪个成分……