Можем ли мы сохранить структуру C в Redis с помощью hiredis?Я могу сохранить это, но не могу получить это - PullRequest
1 голос
/ 16 декабря 2011

Я хочу знать, смогу ли я сохранить структуру C в redis. Но я не знаю, как его получить, потому что example.c в hiredis не упомянул об этом.

Я сохраняю структуру в Redis, используя бинарно-безопасную строку. И я получил + OK, что означает, что я сохранил это правильно.

Код сохранения здесь

...
reply = redisCommand(c, "HMSET %s stat %b", rcvgetattr.pathname, sndgetattr.stbuf, sizeof(struct stat));
printf("Save status %s\n", reply->str);//that shows +OK
freeReplyObject(reply);

А потом, когда я пытаюсь вернуть свои данные, я использую

...
reply = redisCommand(c, "HMGET %s stat", rcvgetattr.pathname);
printf("status %s\n", reply->str);
freeReplyObject(reply);

Поскольку я не знаю, какая часть содержит мою структуру, я использую gdb и пытаюсь выяснить это. Я использую такие команды, как disp (struct stat)reply->str или disp (struct stat)reply->element->str, чтобы узнать, совпадают ли данные с только что сохраненными. Но я потерпел неудачу.

Кто-нибудь знает, где хранятся его данные?

1 Ответ

1 голос
/ 16 декабря 2011

Думаю, проблема в том, что HMGET возвращает массив, а не строку.Попробуйте использовать reply->element[0]->str.

Этот пример кода также может помочь

typedef struct mytest {
    int myInt;
    long myLong;
} mytest;

// ...
mytest t;
t.myInt = 5; t.myLong = 123451;
reply = redisCommand(c, "HMSET %s stat %b", "mykey", &t, sizeof(mytest));
printf("Save status %s\n", reply->str);//that shows +OK
freeReplyObject(reply);

reply = redisCommand(c, "HMGET %s stat", "mykey");
mytest* response = reply->element[0]->str;
printf("status %d %ld\n", response->myInt, response->myLong);
freeReplyObject(reply);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...