Вопрос

Рассмотрим следующий пример:

#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.Могу ли я получить многочисленные ключи, используя HIRYIS?

Лорема Ipsum Долор сидит аметом.Лорем Ipsum Долор сидит аметом.Лорема Ipsum Долор сидит аметом.Лорема Ipsum Долор сидит аметом.Лорем Ipsum Долор сидит аметом.Лорема Ipsum Долор сидит аметом.(Это для глупого коэффициента контроля кода / текста.)

Это было полезно?

Решение

redisreply - это напечатанный объект (см. поле типа), а многопользовательский ответ имеет определенный тип (Redis_reply_array).Поле ул не актуальна в этом случае.

из документации на HIRYIS:

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 удаляет все дерево.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top