gpt4 book ai didi

我们可以通过 hiredis 将 C int 数组设置为 Redis 中的键值吗?

转载 作者:IT王子 更新时间:2023-10-29 06:05:37 26 4
gpt4 key购买 nike

给出:int x[3] = {11,22,33};如何将它作为键的值保存为二进制数据并获取它

hiredis举例说明如何设置二进制safestring

   /* Set a key using binary safe API */
reply = redisCommand(c,"SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);
printf("SET (binary API): %s\n", reply->str);
freeReplyObject(reply);

但是其他数据又如何获取呢?

最佳答案

在没有任何类型的编码的情况下直接将二进制数据存储在远程存储中是灾难的根源。我不建议这样做:有很多序列化协议(protocol)可以用来使二进制数据独立于平台。

也就是说,回答你的问题:

// This is the key
int k[3] = {11,22,33};

// This is the value
int v[4] = {0,1,2,3};
redisReply *reply = 0;

// Store the key/value: note the usage of sizeof to get the size of the arrays (in bytes)
reply = redisCommand(context, "SET %b %b", k, (size_t) sizeof(k), v, (size_t) sizeof(v) );
if (!reply)
return REDIS_ERR;
freeReplyObject(reply);

// Now, get the value back, corresponding to the same key
reply = redisCommand(context, "GET %b", k, (size_t) sizeof(k) );
if ( !reply )
return REDIS_ERR;
if ( reply->type != REDIS_REPLY_STRING ) {
printf("ERROR: %s", reply->str);
} else {

// Here, it is safer to make a copy to be sure memory is properly aligned
int *val = (int *) malloc( reply->len );
memcpy( val, reply->str, reply->len);
for (int i=0; i<reply->len/sizeof(int); ++i )
printf("%d\n",val[i]);
free( val );
}
freeReplyObject(reply);

请注意,只有当您确定所有 Redis 客户端都在具有相同字节顺序和相同 sizeof(int) 的系统上运行时,这种代码才有效。

关于我们可以通过 hiredis 将 C int 数组设置为 Redis 中的键值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com