我正在使用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