首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以对hiredis使用MGET吗?

我可以对hiredis使用MGET吗?
EN

Stack Overflow用户
提问于 2012-02-24 23:14:32
回答 1查看 3.7K关注 0票数 0

考虑下面的示例:

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <hiredis/hiredis.h>

int main(int argc, char **argv) {
  redisContext *redis;
  redisReply *reply;

  redis = redisConnect("127.0.0.1", 6379);
  if(redis->err) {
    fprintf(stderr, "Connection error: %s\n", redis->errstr);
    exit(EXIT_FAILURE);
  }

  reply = redisCommand(redis, "SET %s %s", "foo", "bar");
  printf("SET %s %s: %s\n", "foo", "bar", reply->str);
  freeReplyObject(reply);

  reply = redisCommand(redis, "SET %s %s", "name", "value");
  printf("SET %s %s: %s\n", "name", "value", reply->str);
  freeReplyObject(reply);

  reply = redisCommand(redis, "MGET %s %s", "foo", "name");
  printf("MGET %s %s: %s\n", "foo", "name", reply->str);
  freeReplyObject(reply);

  exit(EXIT_SUCCESS);
}

输出为:

代码语言:javascript
复制
PING: PONG
SET foo bar: OK
GET foo: bar
SET name value: OK
MGET foo name: (null)

这是关于从MGET返回的问题。我可以使用hiredis获得多个密钥吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-25 00:48:33

类型是类型化的对象(请参阅redisReply字段),多批回复具有特定的类型(REDIS_REPLY_ARRAY)。在这种情况下,字符串字段并不相关。

来自hiredis文档:

代码语言:javascript
复制
The number of elements in the multi bulk reply is stored in reply->elements.
Every element in the multi bulk reply is a redisReply object as well
and can be accessed via reply->element[..index..].
Redis may reply with nested arrays but this is fully supported.

因此,您的代码应按如下方式更改:

代码语言:javascript
复制
reply = redisCommand(redis, "MGET %s %s", "foo", "name" );
if ( reply->type == REDIS_REPLY_ERROR )
  printf( "Error: %s\n", reply->str );
else if ( reply->type != REDIS_REPLY_ARRAY )
  printf( "Unexpected type: %d\n", reply->type );
else 
{
  int i;
  for ( i=0; i<reply->elements; ++i )
    printf( "Result: %s\n", reply->element[i]->str );
}
freeReplyObject(reply);

进行此更改后,现在的输出为:

代码语言:javascript
复制
SET foo bar: OK
SET name value: OK
Result: bar
Result: value

注意:不需要释放每个单独的元素,因为freeReplyObject会删除整个树。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9433095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档