C eredis中的BRPOP非阻塞
我正在尝试使用REDIS(带有eredis库)对一组生产者/工作者进行加密 工作人员将其id(比如123)发布到列表中,并使用C eredis中的BRPOP非阻塞,c,redis,C,Redis,我正在尝试使用REDIS(带有eredis库)对一组生产者/工作者进行加密 工作人员将其id(比如123)发布到列表中,并使用BRPOP等待名为wrk:123的列表。我写了下面的代码,但是当LPUSH成功时,BRPOP返回一个空的回复 BRPOP当然可以在redis cli中完美工作 我在这里显然做错了什么,但我不知道是什么 // Push my id to other clients reader = eredis_r( redis ); sprintf(c
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问题有关: 这是由BRPOP行为的变化引起的:当redis连接超时设置为非0值时,该超时也由BRPOP(和类似命令)继承 将redis连接超时设置为0:
eredis_timeout(redis, 0);
使代码按预期运行