2011-12-16 17 views
0

私はredisでC構造を保存できるかどうかを知りたいです。しかし、私はhiredisのexample.cがそれを言及していないので、それを得る方法を知らない。hiredisによってRedisのC構造を保存できますか?私はそれを保存することができますが、それを得ることができません

バイナリセーフな文字列を使用して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

私はあなたが持っている問題は、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); 
+0

を助けるかもしれません!それは - > strですが、%bを使うときは、構造体そのものではなくポインタを渡す必要があります – bxshi

+0

これは私にとってはうまくいくが、mytest *のresponse: reply->要素[0] - > str; –

関連する問題