2016-11-02 13 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()); 

私が望んでいたように、それはE 1に値を設定することができませんでした。その後 『\ E 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()); 

、このようなコードを変更しかし、値が\含まれています?hiredis とE 1ありがとうございました

答えて

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はい、私は間違いました。それを指摘してくれてありがとう:) –

関連する問題