如何使用hiredis设置Redis中包含空格的值

时间:2016-11-02 02:48:53

标签: redis whitespace centos6 hiredis

好吧,我在centos6中使用hiredis客户端连接redis服务器并使用它的redisAppendCommand()向服务器发送命令。

public class VehicleBuilder {
    private String type;
    private int seats;
    private int axles;

    public Vehicle get() {
        if ("car".equals(type)) {
            return new Car(seats);
        } else if ("truck".equals(type)) {
            return new Trunk(axles);
        }
        throw new AssertionError();
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setSeats(int seats) {
        this.seats = seats;
    }

    public void setAxles(int axles) {
        this.axles = axles;
    }
}

无法根据需要将值设置为 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());

但价值将包含\&#34;因为它的内容,所以价值变为 \&#34; E 1 \&#34; ,我只是想知道是否有任何方法来设置值 E 1 < / strong>与hiredis? 谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用format字符串指定命令参数:

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,格式字符串,表示二进制字符串。使用此标志,您可以为键名,字段名和值指定任何字符。由于它是二进制字符串,您必须指定字符串的长度。