使用hiredis實現pipeline方式訪問


1.介紹

hiredis:

一個c/c++的訪問redis的api庫

地址:https://github.com/redis/hiredis

pipeline方式:

redis中的pipeline方式,指的是把多次請求交互封裝到一次完成,只交互一次,類似於多個請求“批處理”成一次交互

好處:

同樣是多次請求,用pipeline方式比多次請求的總的延時低,交互次數少,

即低延遲,高吞吐。

 

2.代碼

int pipeline_process(struct timeval access_timeout, std::vector<std::string> & pipeline_cmd, std::vector<std::string> &pipeline_resp, std::vector<bool> &pipeline_resp_status)
        {
            if (0 == redis_ctx) {return -1;}
            redisSetTimeout(redis_ctx, access_timeout);

            for (int i = 0; i < pipeline_cmd.size();i++)
            {
                redisAppendCommand(redis_ctx, pipeline_cmd[i].c_str());
            }

            for (int i = 0; i < pipeline_cmd.size();i++)
            {
                bool status = false;
                std::string resp_str = "";
                redisReply *reply = 0;

                if(redisGetReply(redis_ctx, (void **)&reply) == REDIS_OK
                        && reply != NULL
                        && reply->type == REDIS_REPLY_STRING)
                {
                    status = true;
                    resp_str = reply->str;
                }
                //free
                freeReplyObject(reply);

                pipeline_resp_status.push_back(status);
                pipeline_resp.push_back(resp_str);

            }
            return 0;
        }

  

3.解釋:

參數:

struct timeval access_timeout:訪問的超時時間

std::vector<std::string> & pipeline_cmd:pipeline處理的多個請求命令字符串

std::vector<std::string> &pipeline_resp:pipeline處理的多個請求返回的字符串

std::vector<bool> &pipeline_resp_status:pipeline處理的多個請求返回的狀態

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM