2016-11-02 81 views
0

那麼,我在centos6中使用hiredis客戶端來連接redis服務器並使用它的redisAppendCommand()向服務器發送命令。如何使用hiredis設置Redis中包含空格的值

redisContext *redisConnect(ip,port); 
std::string value = "E 1"; 
std::string field_name = "field"; 
std::string id_code = "id"; 
std::string key = "HSET type:info:"+ id_code + " " + field_name + " " +value; 

redisAppendCommand(_contxt, key.c_str()); 

它不能設定值é1因爲我想。然後我改變這樣的代碼,

redisContext *redisConnect(ip,port); 
std::string value = "E 1"; 
std::string field_name = "field"; 
std::string id_code = "id"; 
std::string key = "HSET type:info:"+ id_code + " " + field_name + " \"" +value + "\""; 
redisAppendCommand(_contxt, key.c_str()); 

但該值將包含\」,因爲它的內容,所以值變爲\‘E 1 \’,我只是想知道是否有什麼辦法可以只設定值?è1與hiredis 謝謝

回答

0

您可以使用格式字符串指定的命令參數:

string key_name = "type:info:" + id_code; 
redisAppendCommand(redisContext, 
    "%s %b %b %b", 
    "HSET", 
    key_name.data(), key_name.size(), 
    field_name.data(), field_name.size(), 
    value.data(), value.size()); 

%b,形式在字符串處,表示二進制串。使用此標誌,您可以爲鍵名稱,字段名稱和值指定任何字符。由於它是二進制字符串,所以您必須指定字符串的長度。

+0

我想你只想'redisAppendCommand'。 'redisvAppendCommand'用於傳遞現有的va_list。 – nnog

+0

@nnog是的,我犯了一個錯誤。感謝您指出:) –

相關問題