基于hiredis封装HMSET命令
2016-04-14 10:54
671 查看
关于hiredis中执行HMSET,当被设置的field中包含空格时,使用redisCommand的格式进行传入将会被截断,这是需使用redisCommandArgv来进行操作,一下代码为对redisCommandArgv进行封装的HMSET命令,其他需要设置多个域的命令,只需要修改对应命令标识即可
需要注意的是,此段代码只在linux中可以正确被运行,windows将出现崩溃,具体原因暂时不确定,初步怀疑是windows的hiredis-win32的版本库导致
std::vector<std::string> tVec; tVec.push_back("HMSET"); tVec.push_back(key); std::map<std::string, std::string>::const_iterator it = maps.begin(); for (; it != maps.end(); it++) { tVec.push_back(it->first); tVec.push_back(it->second); } vector<const char *> argv( tVec.size()); vector<size_t> argvlen( tVec.size() ); unsigned int j = 0; for ( vector<string>::const_iterator i = tVec.begin(); i != tVec.end(); ++i, ++j ) { argv[j] = i->c_str(); argvlen[j] = i->length(); } redisReply *pReply = static_cast<redisReply *>(redisCommandArgv(m_pRedisContext, argv.size(), &(argv[0]), &(argvlen[0]))); if (pReply) { int errNum = pReply->type; if (errNum == REDIS_REPLY_ERROR) { freeReplyObject(pReply); return -1; } freeReplyObject(pReply); return 0; } return -1;
需要注意的是,此段代码只在linux中可以正确被运行,windows将出现崩溃,具体原因暂时不确定,初步怀疑是windows的hiredis-win32的版本库导致
相关文章推荐
- redis.conf配置详细解析
- Redis-cli 命令总结
- Redis源代码分析(三十五)--- redis.c服务端的实现分析(2)
- Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password
- Redis使用简介
- redis配置不当导致机器被黑
- Windows下Redis的安装使用
- Redis
- Windows上部署Redis
- Dubbo+Spring整合 springmvc+mybatis+shiro整 redis分布式缓存
- linux安装redis
- redis与spring的集成(七)
- 使用Spring Data Redis实现缓存遇到的一些问题
- java 连接Redis的小例子
- Java连接Vmware中的redis
- Java操作redis
- java实现redis数据库访问
- ABP源码分析三十:ABP.RedisCache
- Java操作Redis数据库方法(简单)
- Redis+linux的集群(五)