bool xRedisClient::lpush(const RedisDBIdx& dbi, const string& key, const VALUES& vValue, int64_t& length) { if (0==key.length()) { return false; } VDATA vCmdData; vCmdData.push_back("LPUSH"); vCmdData.push_back(key); addparam(vCmdData, vValue); SETDEFAULTIOTYPE(MASTER); return commandargv_integer(dbi, vCmdData, length); }
bool xRedisClient::srem(const RedisDBIdx& dbi, const KEY& key, const VALUES& vmembers, int64_t& count) { if (0 == key.length()) { return false; } SETDEFAULTIOTYPE(MASTER); VDATA vCmdData; vCmdData.push_back("SREM"); vCmdData.push_back(key); addparam(vCmdData, vmembers); return commandargv_integer(dbi, vCmdData, count); }
bool xRedisClient::ScanFun(const char* cmd, const RedisDBIdx& dbi, const std::string *key, int64_t &cursor, const char* pattern, uint32_t count, ArrayReply& array, xRedisContext& ctx) { SETDEFAULTIOTYPE(MASTER); VDATA vCmdData; vCmdData.push_back(cmd); if (NULL != key) { vCmdData.push_back(*key); } vCmdData.push_back(toString(cursor)); if (NULL != pattern) { vCmdData.push_back("MATCH"); vCmdData.push_back(pattern); } if (0 != count) { vCmdData.push_back("COUNT"); vCmdData.push_back(toString(count)); } bool bRet = false; RedisConn *pRedisConn = static_cast<RedisConn *>(ctx.conn); if (NULL == pRedisConn) { SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR)); return false; } std::vector<const char*> argv(vCmdData.size()); std::vector<size_t> argvlen(vCmdData.size()); uint32_t j = 0; for (VDATA::const_iterator i = vCmdData.begin(); i != vCmdData.end(); ++i, ++j) { argv[j] = i->c_str(), argvlen[j] = i->size(); } redisReply *reply = static_cast<redisReply *>(redisCommandArgv(pRedisConn->getCtx(), argv.size(), &(argv[0]), &(argvlen[0]))); if (RedisPool::CheckReply(reply)) { if (0 == reply->elements){ cursor = 0; } else { cursor = atoi(reply->element[0]->str); redisReply **replyData = reply->element[1]->element; for (size_t i = 0; i < reply->element[1]->elements; i++) { DataItem item; item.type = replyData[i]->type; item.str.assign(replyData[i]->str, replyData[i]->len); array.push_back(item); } } bRet = true; } else { SetErrInfo(dbi, reply); } RedisPool::FreeReply(reply); return bRet; }