Hiredis ::如何使用lpush将空白字符串插入REDIS列表中



我正在使用Hiredis Library的Rediscommand做这样的事情:

LPUSH list1 a b "" c d "" e

其中"表示我想将空元素插入列表。当我从Redis上的命令行进行操作时,它可以正常工作,但是当我将其作为Hiredis上的命令传递时,它不起作用,并且该元素最终为"而不是空。有什么工作吗?

这是我称为rediscommand的方式:

reply = (redisReply *) redisCommand(c,"LPUSH list1 a b c "" c d "" e);

我尝试将单个引号,后斜切等放置

如果要推入列表的元素数量已固定:使用redisCommand与格式化参数

使用
const char *list = "list-name";
const char *non_empty_val = "value";
const char *empty_val = "";
/* or use %b to push binary element, as the other answer mentioned. */
redisReply *reply = (redisReply*)redisCommand(redis,
                          "lpush %s %s %s", list, non_empty_val, empty_val);

如果元素的数量是动态的:使用redisCommandArgv

int argc = 4;  /* number of arguments including command name. */
const char **argv = (const char**)malloc(sizeof(const char**) * argc);
argv[0] = strdup("lpush");
argv[1] = strdup(list);
argv[2] = strdup(non_empty_val);
argv[3] = strdup(empty_val);
/* specify the length of each argument. */
size_t *argv_len = (size_t*)malloc(sizeof(size_t) * argc);
for (int i = 0; i < argc; ++i)
    argv_len[i] = strlen(argv[i]);
redisReply *reply = (redisReply*)redisCommandArgv(redis, argc, argv, argv_len);

您可以使用redis中的二进制安全字符串。使用lpush命令继续将二进制字符串添加到列表中,如下所示:

redisreply *回复= rediscommand(上下文," lpush list1%b%b%b"," a",strlen(" a"),",0," b",strlen(" b"));

输出将是:

127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) ""
3) "a"

hth,Swanand

最新更新