0

まあ、centos6でhiredisクライアントを使用してredisサーバーに接続し、redisAppendCommand()を使用してコマンドをサーバーに送信しています。

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に値を設定できませんでした。次に、このようにコードを変更します。

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\"になります。

4

1 に答える 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は、フォーマット文字列で、バイナリ文字列を意味します。このフラグを使用すると、キー名、フィールド名、および値に任意の文字を指定できます。バイナリ文字列なので、文字列の長さを指定する必要があります。

于 2016-11-02T09:37:55.657 に答える