bool xRedisClient::sinter(const DBIArray& vdbi, const KEYS& vkey, VALUES& sValue) { int size = vkey.size(); VALUES *setData = new VALUES[size]; VALUES::iterator endpos; DBIArray::const_iterator iter_dbi = vdbi.begin(); KEYS::const_iterator iter_key = vkey.begin(); int i=0; for (; iter_key!=vkey.end(); ++iter_key, ++iter_dbi, ++i) { const string &key = *iter_key; const RedisDBIdx &dbi = *iter_dbi; if (!smember(dbi, key, setData[i])) { delete [] setData; return false; } } int n=0; while(n++<size-1) { endpos = set_intersection( setData[n].begin(), setData[n].end(), setData[n+1].begin(), setData[n+1].end() , sValue.begin()); sValue.resize( endpos - sValue.begin()); } delete [] setData; return true; }
bool xRedisClient::mget(const DBIArray &vdbi, const KEYS & keys, ReplyData& vDdata) { bool bRet = false; size_t n = vdbi.size(); if (n!=keys.size()) { return bRet; } DataItem item; DBIArray::const_iterator iter_dbi = vdbi.begin(); KEYS::const_iterator iter_key = keys.begin(); for (;iter_key!=keys.end();++iter_key, ++iter_dbi) { const RedisDBIdx& dbi = *iter_dbi; SETDEFAULTIOTYPE(SLAVE); const string &key = *iter_key; if (key.length()>0) { bool ret = command_string(*iter_dbi, item.str, "GET %s", key.c_str()); if (!ret) { item.type = REDIS_REPLY_NIL; item.str = ""; } else { item.type = REDIS_REPLY_STRING; bRet = true; } vDdata.push_back(item); } } return bRet; }