bool CRedisClient::hscan(const string &key, int64_t cursor, VecString& values,const string &match, uint64_t count ) { static uint64_t lastCur = 0; uint64_t realCur = 0; CResult result; if ( cursor >= 0 ) { realCur = cursor; }else { realCur = lastCur; } hscan( key, realCur, match, count, result ); ReplyType type = result.getType() ; if ( REDIS_REPLY_ERROR == type ) { throw ReplyErr( result.getErrorString() ); }else if ( REDIS_REPLY_ARRAY != type ) { throw ProtocolErr( "HSCAN: data recved is not arry" ); } CResult::ListCResult::const_iterator it = result.getArry().begin(); if ( REDIS_REPLY_STRING != it->getType() ) { throw ProtocolErr( "HSCAN: first ele is not string" ); } lastCur = _valueFromString<uint64_t>( it->getString() ); ++it; _getValueFromArry( it->getArry(), values ); return ( lastCur == 0 ? false : true ); }