gpt4 book ai didi

c - edis 中的 BRPOP 非阻塞

转载 作者:行者123 更新时间:2023-11-30 16:07:37 27 4
gpt4 key购买 nike

我正在尝试使用 REDIS(与 edis 库)来同步一组生产者/工作人员。

工作人员会将其 ID(例如 123)发布到列表中,并使用 BRPOP 在名为 wrk:123 的列表上等待。我编写了下面的代码,但是当 LPUSH 成功时,BRPOP 返回空回复!

BRPOP 当然可以在 redis-cli 中完美运行。

我显然在这里做错了什么,但我不知道它是什么!!

      // Push my id to other clients
reader = eredis_r( redis );
sprintf(cmdbuf,"LPUSH readylist %d",myid);
reply = eredis_r_cmd(reader,cmdbuf);
if (reply && reply->type == REDIS_REPLY_INTEGER) {
printf("Reply: %lld\d",reply->integer);
}

// WAIT some other client to sendme data
sprintf(cmdbuf,"BRPOP wrk:%d 0",myid);
reply = eredis_r_cmd(reader,cmdbuf);
if (reply) {
switch (reply->type) {
case REDIS_REPLY_ERROR: printf("Reply: ERROR %.*s\n",(int)reply->len,reply->str);
break;

default: printf("Reply type: %d\n",reply->type);
}
}
else printf("Reply is null\n");

eredis_r_clear( reader );
eredis_r_release( reader );

最佳答案

这似乎与以下hiredis问题有关: https://github.com/redis/hiredis/issues/722这是由 BRPOP 行为的变化引起的:当 redis 连接超时设置为非 0 值时,该超时也由 BRPOP(和类似命令)继承。

将redis连接超时设置为0:

eredis_timeout(redis, 0);

使代码按预期运行。

关于c - edis 中的 BRPOP 非阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59589621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com