C++ 操作Redis HSCAN命令的处理
当redis HMAP数据量比较大的时候(上百万条记录),你一定会想有没有办法一部分一部分的取,这时候HSCAN就派上用场了。
1 命令使用:HSCAN KEY nCursor COUNT nCount
解释:KEY是HASHMAP的键名 nCursor是游标(初始值一般为0,后续的都使用上一次HSCAN命令返回的游标值) nCount 是本次查询的总数(实际结果是nCount相近的一个值,并不是确定的,具体原因请参考:https://www.dazhuanlan.com/2020/02/18/5e4b60d653b35/)
2 网络上很多关于redis array类型的操作都只包含一级array,对于多级array没有处理,所以在调用HSCAN的时候是取不出来的,直接上代码:
QString ExecuteHGetMap(QString& sError, QString& sCursor,std::map<QString, QString>& mapRedisHashMap, redisReply *reply)
{
QString out;
switch(reply->type)
{
/// 为了适配多种类型的数据,这里不直接取element的str,改为递归取对应类型的值,如果key或value的类型是int,element->str是无法取出来的
case REDIS_REPLY_ERROR:
sError += QString("(error) %1\n").arg(reply->str);
break;
case REDIS_REPLY_STATUS:
out = reply