2012-02-24 2 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에서 반환에 관하여이다. 하나는 많은 키를 고용하여 얻을 수 있습니까?

가 lorem ipsum의 당근. LOREM의 ipsum의 당근. LOREM의 ipsum의 당근. LOREM의 ipsum의 당근. LOREM의 ipsum의 당근. LOREM의 ipsum의 당근. (그것은 바보 같은 코드/텍스트 시스템 제어를위한입니다.)

답변

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은 전체 더 나은 설명서를 읽기 시작합니다. HGETALL에 대한 –

+0

@Didier 스페 치아 무엇? 키와 값 모두 [i]는 요소 권리로 올 것이다? 어떤 –

+0

- 1 키는 요소로 요소 [I]를 값으로 올 것이다 생각하지 [I + 1] –

관련 문제