2012-02-24 22 views
0

考虑下面的例子:可以使用MGET与雇用?

#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); 
} 

输出是:

PING: PONG 
SET foo bar: OK 
GET foo: bar 
SET name value: OK 
MGET foo name: (null) 

这是关于MGET回报。 1可以得到许多按键采用聘请?

Lorem存有胡萝卜。 Lorem存有胡萝卜。 Lorem存有胡萝卜。 Lorem存有胡萝卜。 Lorem存有胡萝卜。 Lorem存有胡萝卜。 (它是愚蠢的代码/文字的系统控制。)

回答

1

甲redisReply是一个类型的对象(见类型字段),以及多块体答复具有特定的类型(REDIS_REPLY_ARRAY)。 STR的领域是不是在这种情况下,相关的。

从聘请文档:

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. 

那么如下的代码应改为:

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); 

随着这一变化,输出现在是:

SET foo bar: OK 
SET name value: OK 
Result: bar 
Result: value 

注意:没有必要释放每个单独的元素,因为freeReplyObject删除整个树。

+0

感谢凯瑟琳,1整最好开始阅读说明书。 – 2012-02-27 01:09:08

+0

@Didier拉斯佩齐亚什么HGETALL?键和值都将来作为 元素[I]吧?没有 – 2012-11-28 09:48:49

+0

- 1认为主要会为元素[i]和值元素[I + 1] – 2012-11-28 11:03:39