我正在尝试使用 SET 将我的结构的二进制 blob 保存为 Redis(通过hiredis)中的值。我通过执行我的程序来设置它,并尝试稍后在另一次运行中检索它。出于某种原因,我无法取回动态分配的字符串。
这是我正在做的简化代码片段。在实际实现中,我的结构更复杂,包括字符串、链表、子结构。
typedef struct mytest {
int myInt;
char *myStr;
} mytest;
char *key = strdup("test_key");
int vsize = 0;
mytest t;
memset(&t, 0, sizeof(t));
t.myInt = 100;
vsize += sizeof(t.myInt);
t.myStr = strdup("test_string");
vsize += strlen(t.myStr);
redisReply *reply = 0;
// set value
reply = redisCommand(context, "SET %b %b", key, (size_t) strlen(key), &t, (size_t) vsize);
if (!reply)
return REDIS_ERR;
freeReplyObject(reply);
// get the value back
reply = redisCommand(context, "GET %b", key, (size_t) strlen(key));
struct mytest *retval = (struct mytest *) reply->str;
printf("GET %s: myInt = %d myStr = %s", retval->myInt, retval->myStr);
我有以下问题:
- 我在这里做错了什么?
- SET/GET 是存储复杂数据结构的正确方法还是应该在 Redis 中使用其他东西?我想将结构作为单个实体而不是单独的字段来访问。
- 如果是成员链表,它们应该如何存储?
我找不到任何可以解决我的用例的示例,因此任何示例都会有所帮助。