redis 空格问题

来源:互联网 发布:gommdb数据库编辑器 编辑:程序博客网 时间:2024/06/04 19:59

记在redis 中遇到的空格问题,

在使用hset的时候,当键或值有空格的时候总是写不成功,如下封装的hmset方法:
int CRedisIntf::hash_mset(const string& key, const vector<string>& fields, const vector<string>& values){if (key.empty() || fields.empty() || values.empty()){return -1;}string strFormat = "HMSET " + key + " ";for (size_t i = 0; i < fields.size(); ++i){if (fields[i].empty()){return -1;}strFormat += fields[i] + " ";strFormat += values[i] + " ";}if (!_check_connect()){return -1;}    mcgWriteLog("CRedisIntf::hash_mset %s",strFormat.c_str());redisAppendCommand(m_pRedis,strFormat.c_str());redisReply* reply = NULL;redisGetReply(m_pRedis,(void**)&reply);if (reply == NULL){redisFree(m_pRedis);m_pRedis = NULL;return -1;}if (reply->type == REDIS_REPLY_STATUS && strcmp(reply->str,"OK") == 0){freeReplyObject(reply);return 0;}else{freeReplyObject(reply);return -1;}}

问题所在:
strFormat += fields[i] + " ";strFormat += values[i] + " ";
redis提供的库,就是用空格来分隔参数的,如果一个字符串中本身带有一个空格,最后组装完成后这就等于两个参数,所以就会出现键和值数量不对应的关系,即使巧合对应了,但是肯定也不是我们期待的结果,

解决办法:
1. 替换,在调用hset方法前,将键或值中的空格替换成指定字符(如:" " --> "0x00" ),在读取的时候("0x00" -->" ")。
2.编码,其实和方法1类似 ( valuse = Base64Encode(args,valuse)) 
其实都是想办法去掉空格即可