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

hiredis支持lua调用吗

发布网友 发布时间:2022-04-11 23:47

我来回答

2个回答

懂视网 时间:2022-04-12 04:08

异步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-04-12 01:16

在lua API中,调用一个函数的步骤很简单:
1.压入你要调用的函数,使用lua_getglobal。
2.压入调用参数。
3.使用lua_pcall
4.从栈中弹出结果。
举例说明,假设你有这么一个lua函数:
function f (x, y)
return (x^2 * math.sin(y))/(1 - x)
end
那么,我们就可以定义个c函数来封装这个调用:
/* call a function 'f' defined in Lua */
double f (double x, double y)
{

double z;
lua_getglobal(L, "f");
lua_pushnumber(L, x);
lua_pushnumber(L, y);
/* do the call (2 arguments, 1 result) */
if (lua_pcall(L, 2, 1, 0) != 0)
error(L, "error running function 'f': %s",
lua_tostring(L, -1));
if (!lua_isnumber(L, -1))
error(L, "function 'f' must return a number");
z = lua_tonumber(L, -1);
lua_pop(L, 1);
return z;
}
lua_pcall在压入结果的之前,会将函数,和参数弹出,如果返回多个结果,第一个最先压入。如果lua_pcall运行出错,那么会返回个非0值。
Redis 协议 事务 发布订阅 异步连接

发布订阅功能一般要重新开启一个连接,这是因为命令连接严格遵循请求回应模式,pubsub能收到redis主动推送的内容。所以实际项目中如果支持pubsub的话,需要另开一条连接用于处理发布订阅。5、redis异步连接 hiredis是一个redis的C客户端库函数,服务端可以使用它来访问redis服务器。5.1、同步连接 同步连接采用...

lua调用java lua 调用typeof lua调用so js调用lua python调用lua脚本 lua 链式调用 lua调用c函数 lua的应用 lua js
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
凉拌黑木耳:泡发后需要用沸水焯多长时间啊? 请问怎样截图视频某段然后制作GIF动画呢???另外截图后,每个帧怎样做相... 手把手教你用 Chrome 制作 GIF 截图 四川达州中考录取分数线,? 宣汉昆池职业中学2024年分数线是多少 大竹县石子职业中学2024年分数线是多少 韦博开心豆少儿英语教学如何创新并保持学习动力与成果? 有什么好看的日漫?【 不要太老的 人物都很漂漂 】 谢谢na~ 推荐好看的日漫 类型无所谓,老一点也可以,新出的也可以。但绝对不... 兔属相和龙属相合不合 兔属相和什么相冲相克 hiredis 怎么创建多个数据库 如何查看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的应用软件 hiredis 能用在3.0版本 redis集群吗 windows hiredis能访问linux的redis吗 关系型数据库中存储过程的用户接口有哪些 我国企业供应链管理信息系统的现状 想兼职做一些企业报表, 数据库开发, 企业ERP接口扩展方面的工作, 好找吗? +什么是反向键索引+反向键索引原理+创建反向键索引 如何建立高效的反向索引 在什么样的环境下需要建立反向键索引 SQLSERVER2000中能不能建立反向索引 SQL如何建立倒序索引 搜索引擎如何建立索引 什么是正向索引? mongodb 分页查询 需要自动增加ID吗 如何设置zookeeper的JVM内存 如何定期自动删除归档日志 怎么合理的删除归档日志 使用RMAN备份时应如何处置归档日志文件 disabled 和unable 的区别? unable和disabled的区别,比如是什么词性……一般在句子中作哪个成分…… unable意思