在使用Redis客戶端hiredis處理redis的命令時,當key或者value中包括空格時,遇到命令執行失敗的問題。 redis
具體狀況以下: shell
#include <hiredis/hiredis.h> int main(int argc, char const *argv[]) { redisContext *c = redisConnect("127.0.0.1", 6379); if (c != NULL && c->err) { printf("Error: %s\n", c->errstr); } redisReply *reply; // 執行命令: SET foo "bar bar" // 直接使用字符串拼接會執行錯誤 reply = redisCommand(c, "SET foo \"bar bar\""); if (reply->type == REDIS_REPLY_ERROR) { printf("Error - 1: %s\n", reply->str); } // 經過%s代替後能夠正確執行 reply = redisCommand(c, "SET foo %s", "bar bar"); if (reply->type == REDIS_REPLY_ERROR) { printf("Error - 2: %s\n", reply->str); } return 0; }
程序的執行結果以下: spa
roo@roose:~/myredis$ cc hitest.c -lhiredis roo@roose:~/myredis$ ./a.out Error - 1: ERR syntax error