Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C eredis中的BRPOP非阻塞_C_Redis - Fatal编程技术网

C eredis中的BRPOP非阻塞

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

我正在尝试使用REDIS(带有eredis库)对一组生产者/工作者进行加密

工作人员将其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问题有关: 这是由BRPOP行为的变化引起的:当redis连接超时设置为非0值时,该超时也由BRPOP(和类似命令)继承

将redis连接超时设置为0:

eredis_timeout(redis, 0);
使代码按预期运行