首页 > 程序开发 > 软件开发 > 其他 > 正文
redis 空格问题
2017-05-19       个评论    来源:算法随笔  
收藏    我要投稿

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

在使用hset的时候,当键或值有空格的时候总是写不成功,如下封装的hmset方法:
int CRedisIntf::hash_mset(const string& key, const vector& fields, const vector& 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))
其实都是想办法去掉空格即可
 
点击复制链接 与好友分享!回本站首页
上一篇:微服务,微架构[六]之springboot集成mybatis
下一篇:Head First 设计模式学习——观察者模式
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站