Exemplo n.º 1
0
bool xRedisClient::commandargv_array(const RedisDBIdx& dbi, const VDATA& vDataIn, VALUES& array){
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return false;
    }

    std::vector<const char*> argv( vDataIn.size() );
    std::vector<size_t> argvlen( vDataIn.size() );
    uint32_t j = 0;
    for ( VDATA::const_iterator i = vDataIn.begin(); i != vDataIn.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)) {
        for (size_t i = 0; i<reply->elements; i++) {
            std::string str(reply->element[i]->str, reply->element[i]->len);
            array.push_back(str);
        }
        bRet  = true;
    } else {
        SetErrInfo(dbi, reply);
    }

    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);
    return bRet;
}
Exemplo n.º 2
0
bool xRedisClient::commandargv_integer(const RedisDBIdx& dbi, const VDATA& vDataIn, int64_t& retval){
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return false;
    }

    std::vector<const char*> argv( vDataIn.size() );
    std::vector<size_t> argvlen( vDataIn.size() );
    uint32_t j = 0;
    for ( VDATA::const_iterator iter = vDataIn.begin(); iter != vDataIn.end(); ++iter, ++j ) {
        argv[j] = iter->c_str(), argvlen[j] = iter->size();
    }

    redisReply *reply = static_cast<redisReply *>(redisCommandArgv(pRedisConn->getCtx(), argv.size(), &(argv[0]), &(argvlen[0])));
    if (RedisPool::CheckReply(reply)) {
        retval = reply->integer;
        bRet  = true;
    } else {
        SetErrInfo(dbi, reply);
    }

    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);
    return bRet;
}
Exemplo n.º 3
0
void xRedisClient::FreexRedisContext(xRedisContext* ctx)
{
    RedisConn *pRedisConn = static_cast<RedisConn *>(ctx->conn);
    redisReply *reply = static_cast<redisReply *>(redisCommand(pRedisConn->getCtx(), "unsubscribe"));
    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection((RedisConn*)ctx->conn);
}
Exemplo n.º 4
0
bool xRedisClient::commandargv_status(const RedisDBIdx& dbi, const VDATA& vData) {
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return bRet;
    }

    std::vector<const char *> argv( vData.size() );
    std::vector<size_t> argvlen( vData.size() );
    uint32_t j = 0;
    for ( VDATA::const_iterator i = vData.begin(); i != vData.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)) {
        // Assume good reply until further inspection
        bRet = true;
        
        if (REDIS_REPLY_STRING == reply->type) {
            if (!reply->len || !reply->str || strcasecmp(reply->str, "OK") != 0) {
                bRet = false;
            }
        }
    } else {
        SetErrInfo(dbi, reply);
    }
    
    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);

    return bRet;
}
Exemplo n.º 5
0
bool xRedisClient::command_array(const RedisDBIdx& dbi,  ArrayReply& array,  const char* cmd, ...){
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return false;
    }

    va_list args;
    va_start(args, cmd);
    redisReply *reply = static_cast<redisReply *>(redisvCommand(pRedisConn->getCtx(), cmd, args));
    va_end(args);
    if (RedisPool::CheckReply(reply)) {
        for (size_t i = 0; i<reply->elements; i++) {
            DataItem item;
            item.type = reply->element[i]->type;
            item.str.assign(reply->element[i]->str, reply->element[i]->len);
            array.push_back(item);
        }
        bRet  = true;
    } else {
        SetErrInfo(dbi, reply);
    }

    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);
    return bRet;
}
Exemplo n.º 6
0
bool xRedisClient::command_status(const RedisDBIdx& dbi, const char* cmd, ...) {
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return false;
    }

    va_list args;
    va_start(args, cmd);
    redisReply *reply = static_cast<redisReply *>(redisvCommand(pRedisConn->getCtx(), cmd, args));
    va_end(args);

    if (RedisPool::CheckReply(reply)) {
        // Assume good reply until further inspection
        bRet = true;
        
        if (REDIS_REPLY_STRING == reply->type) {
            if (!reply->len || !reply->str || strcasecmp(reply->str, "OK") != 0) {
                bRet = false;
            }
        }
    } else {
        SetErrInfo(dbi, reply);
    }
 
    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);

    return bRet;
}
Exemplo n.º 7
0
bool xRedisClient::command_bool(const RedisDBIdx& dbi, const char *cmd, ...) {
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return false;
    }

    va_list args;
    va_start(args, cmd);
    redisReply *reply = static_cast<redisReply *>(redisvCommand(pRedisConn->getCtx(), cmd, args));
    va_end(args);

    if (RedisPool::CheckReply(reply)) {
        if (REDIS_REPLY_STATUS==reply->type) {
            bRet = true;
        } else {
            bRet = (reply->integer == 1) ? true : false;
        }
    } else {
        SetErrInfo(dbi, reply);
    }

    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);

    return bRet;
}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
0
rReply *xRedisClient::command(const RedisDBIdx& dbi, const char* cmd)
{
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return NULL;
    }
    rReply *reply = static_cast<rReply *>(redisCommand(pRedisConn->getCtx(), cmd));

    mRedisPool->FreeConnection(pRedisConn);
    return reply;
}
Exemplo n.º 10
0
int32_t xRedisClient::GetReply(xRedisContext* ctx, ReplyData& vData)
{
    //vData.clear();
    //ReplyData(vData).swap(vData);
    redisReply *reply;
    RedisConn *pRedisConn = static_cast<RedisConn *>(ctx->conn);
    int32_t ret = redisGetReply(pRedisConn->getCtx(), (void**)&reply);
    if (0==ret) {
        for (size_t i = 0; i < reply->elements; i++) {
            DataItem item;
            item.type = reply->element[i]->type;
            item.str.assign(reply->element[i]->str, reply->element[i]->len);
            vData.push_back(item);
        }
    }
    RedisPool::FreeReply(reply);
    return ret;
}
Exemplo n.º 11
0
bool xRedisClient::hincrbyfloat(const RedisDBIdx& dbi,  const string& key, const string& field, float increment, float& value ) {
    SETDEFAULTIOTYPE(MASTER);
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex);
    if (NULL==pRedisConn) {
        return false;
    }

    redisReply *reply = static_cast<redisReply *>(redisCommand(pRedisConn->getCtx(), "HINCRBYFLOAT %s %s %f", key.c_str(), field.c_str(), increment));
    if (RedisPool::CheckReply(reply)) {
        value = atof(reply->str);
        bRet = true;
    }

    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);
    return bRet;
}
Exemplo n.º 12
0
bool RedisDBSlice::ConnectRedisNodes(unsigned int cahcetype, unsigned int dbindex, const std::string& host, unsigned int port, const std::string& passwd, unsigned int poolsize, unsigned int timeout, int role)
{
    bool bRet = false;
    if ((host.empty())
        || (cahcetype > MAX_REDIS_CACHE_TYPE)
        || (dbindex > MAX_REDIS_DB_HASHBASE)
        || (poolsize > MAX_REDIS_CONN_POOLSIZE)) {
        return false;
    }

    try {
        if (MASTER == role) {
            XLOCK(mSliceConn.MasterLock);
            for (unsigned int i = 0; i < poolsize; ++i) {
                RedisConn *pRedisconn = new RedisConn;
                if (NULL == pRedisconn) {
                    continue;
                }

                pRedisconn->Init(cahcetype, dbindex, host.c_str(), port, passwd.c_str(), poolsize, timeout, role, 0);
                if (pRedisconn->RedisConnect()) {
                    mSliceConn.RedisMasterConn.push_back(pRedisconn);
                    mStatus = REDISDB_WORKING;
                } else {
                    delete pRedisconn;
                }
            }
            bRet = true;
        } else if (SLAVE == role) {
            XLOCK(mSliceConn.SlaveLock);
            RedisConnPool *pSlaveNode = new RedisConnPool;
            int slave_idx = mSliceConn.RedisSlaveConn.size();
            for (unsigned int i = 0; i < poolsize; ++i) {
                RedisConn *pRedisconn = new RedisConn;
                if (NULL == pRedisconn) {
                    continue;
                }

                pRedisconn->Init(cahcetype, dbindex, host.c_str(), port, passwd.c_str(), poolsize, timeout, role, slave_idx);
                if (pRedisconn->RedisConnect()) {
                    pSlaveNode->push_back(pRedisconn);
                } else {
                    delete pRedisconn;
                }
            }
            mSliceConn.RedisSlaveConn.push_back(pSlaveNode);
            bRet = true;
            mHaveSlave = true;
        } else {
            bRet = false;
        }

    } catch (...) {
        return false;
    }

    return bRet;
}
Exemplo n.º 13
0
bool xRedisClient::command_string(const RedisDBIdx& dbi, std::string &data, const char* cmd, ...) {
    bool bRet = false;
    RedisConn *pRedisConn = mRedisPool->GetConnection(dbi.mType, dbi.mIndex, dbi.mIOtype);
    if (NULL == pRedisConn) {
        SetErrString(dbi, GET_CONNECT_ERROR, ::strlen(GET_CONNECT_ERROR));
        return false;
    }

    va_list args;
    va_start(args, cmd);
    redisReply *reply = static_cast<redisReply *>(redisvCommand(pRedisConn->getCtx(), cmd, args));
    va_end(args);
    if (RedisPool::CheckReply(reply)) {
        data.assign(reply->str, reply->len);
        bRet = true;
    } else {
        SetErrInfo(dbi, reply);
    }

    RedisPool::FreeReply(reply);
    mRedisPool->FreeConnection(pRedisConn);

    return bRet;
}
Exemplo n.º 14
0
int redis_conns_init()
{
	if(redis_load_conf() != OK)
	{
		printf("\nredis_load_conf failed!\n");
		return FAIL;
	}

	int ret;
	ret = redis_conn.initConn(redis_conf.redis_conf);
	if(OK != ret)
	{
		printf("redis conn init error.ip=[%s], port=[%d]",redis_conf.redis_conf.ip,redis_conf.redis_conf.port);
		return FAIL;
	}

	return OK;
}