文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

redis++怎么编译、安装及使用

2023-07-05 16:26

关注

这篇“redis++怎么编译、安装及使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“redis++怎么编译、安装及使用”文章吧。

前言

之前给公司作网关,一直想找个牛逼点的C++ 的 或者 C的 redis连接库。 结果很多都不近人意。

常见的是:hiredis 和hirredisvip

hiredis 和hirredisvip 都是最基础的。也没封装什么连接池啊,自动重连啊,那些东西。适合简单的场景。或者你自己手艺好,能自己封装一层好的接口。

后来尝试:cloredis

最后发现:redisplus plus

直到有一天我问同事,他们给我看redis官网推荐的C++的连接库,有好多库。好几页。而平时看的redis中文网推荐的才几个。艾玛。耽误事儿啊。

然后我接触了redisplus plus (redis++)。感觉蛮给力的玩意。

redis++怎么编译、安装及使用

连接单机模式的

#include <unistd.h>#include <chrono>#include <tuple>#include <iostream>#include <vector>#include <map>#include <unordered_set>#include <sw/redis++/redis++.h>#include <sw/redis++/sentinel.h>#include <sw/redis++/connection.h>#include <sw/redis++/connection_pool.h>//using namespace std;using namespace sw::redis;using namespace std::chrono;int main(){    ConnectionOptions connection_options;    connection_options.host = "192.168.11.85";  // Required.    connection_options.port = 16379; // Optional. The default port is 6379.    //connection_options.password = "auth";   // Optional. No password by default.    connection_options.db = 5;  // Optional. Use the 0th database by default.     ConnectionPoolOptions pool_options;    pool_options.size = 3;  // Pool size, i.e. max number of connections.    pool_options.wait_timeout = std::chrono::milliseconds(100);     ConnectionOptions connection_options2;    connection_options2.host = "192.168.11.85";     connection_options2.port = 16379;    connection_options2.db = 7;     ConnectionPoolOptions pool_options7;    pool_options7.size = 3;     pool_options7.wait_timeout = std::chrono::milliseconds(100);     Redis * redisofDB1 = NULL;    Redis * redisofDB7 = NULL;    // 开始连接    try{        redisofDB1 = new Redis(connection_options, pool_options);            redisofDB7 = new Redis(connection_options2, pool_options7);    }catch (const ReplyError &err) {        printf("RedisHandler-- ReplyError:%s \n",err.what());        return false ;    }catch (const TimeoutError &err) {        printf("RedisHandler-- TimeoutError%s \n",err.what());        return false ;    }catch (const ClosedError &err) {        printf("RedisHandler-- ClosedError%s \n",err.what());        return false ;    }catch (const IoError &err) {        printf("RedisHandler-- IoError%s \n",err.what());        return false ;    }catch (const Error &err) {        printf("RedisHandler-- other%s \n",err.what());        return false ;    }          // 开始干活    auto cursor = 0LL;    auto pattern = "*";    auto count = 5;    //std::unordered_set<std::string> keys;    std::map<std::string, std::string> hashs;    while (true) {        cursor = redisofDB7->hscan("FORWARD.PLAT.DETAIL",cursor, pattern, count, std::inserter(hashs, hashs.begin()));         if (cursor == 0) {            break;        }    }    if(hashs.size() < 1)    {        printf("we get nothing !\n");    }    for(auto it1 = hashs.begin() ;it1 != hashs.end(); it1++)    {        std::cout <<"Plat ID:"  <<it1->first <<std::endl;        std::cout <<  "Plat UserName & Password"<<it1->second <<std::endl;    }     OptionalString strValue = redisofDB1->hget("XNY.CARINFO","CRC01211711100232");    std::cout<< " CRC01211711100232  的 vin :" << *strValue << std::endl;    std::string straa = *strValue;    if(straa.empty())    {           std::cout << "we gete nothing " << std::endl ;    }    std::cout<< " ---- CRC01211711100232  的 details :" << straa << std::endl;     std::cout<< " ---- 下面试试hincrby ---- " << std::endl;       auto cursor2 = 0LL;    auto pattern2 ="*";    auto count2 = 20;    std::map<std::string, std::string> vv;    std::vector<std::string> vlist;    while (true) {        cursor2 = redisofDB7->hscan("FORWARD.LIST.002",cursor2, pattern2, count2, std::inserter(vv, vv.begin()));         if (cursor2 == 0) {            break;        }    }     for(auto it1 = vv.begin() ;it1 != vv.end(); it1++)    {        vlist.push_back(it1->first);    }     for(auto uu = vlist.begin(); uu !=vlist.end(); uu ++ )    {        std::cout << *uu << std::endl;    }     return 0;}

连接哨兵模式的

#include <unistd.h>#include <chrono>#include <tuple>#include <iostream>#include <vector>#include <map>#include <sw/redis++/redis++.h>#include <sw/redis++/sentinel.h>#include <sw/redis++/connection.h>#include <sw/redis++/connection_pool.h>//using namespace std;using namespace sw::redis;int main(){    SentinelOptions sentinel_opts;    // sentinel_opts.nodes = {{"127.0.0.1", 9000},    //                     {"127.0.0.1", 9001},    //                     {"127.0.0.1", 9002}};   // Required. List of Redis Sentinel nodes.    sentinel_opts.nodes = {{"192.168.127.134", 26379}};// Required. List of Redis Sentinel nodes.    // Optional. Timeout before we successfully connect to Redis Sentinel.    // By default, the timeout is 100ms.    sentinel_opts.connect_timeout = std::chrono::milliseconds(200);     // Optional. Timeout before we successfully send request to or receive response from Redis Sentinel.    // By default, the timeout is 100ms.    sentinel_opts.socket_timeout = std::chrono::milliseconds(200);     auto sentinel = std::make_shared<Sentinel>(sentinel_opts);      ConnectionOptions connection_opts;    //connection_opts.password = "auth";  // Optional. No password by default.    connection_opts.db = 1;     connection_opts.connect_timeout = std::chrono::milliseconds(100);   // Required.    connection_opts.socket_timeout = std::chrono::milliseconds(100);    // Required.     ConnectionPoolOptions pool_opts;    pool_opts.size = 3; // Optional. The default size is 1.     auto redis = Redis(sentinel, "mymaster", Role::MASTER, connection_opts, pool_opts);    Redis* p = &redis;    std::map<std::string, std::string> hash;    p->hgetall("PLATINFO",std::inserter(hash, hash.end()));     for(auto it = hash.begin() ;it != hash.end(); it++)    {        std::cout <<"Plat ID:"  <<it->first <<std::endl;        std::cout <<  "Plat UserName & Password"<<it->second <<std::endl;    }     ConnectionOptions connection_opts2;    //connection_opts.password = "auth";  // Optional. No password by default.    connection_opts2.db = 2;     connection_opts2.connect_timeout = std::chrono::milliseconds(100);   // Required.    connection_opts2.socket_timeout = std::chrono::milliseconds(100);    // Required.     auto redisDB2 = Redis(sentinel, "mymaster", Role::MASTER, connection_opts2, pool_opts);    Redis*pp  = &redisDB2;    std::map<std::string, std::string> hashTerm;    pp->hgetall("TERMINAL:LIST:test123456789012",std::inserter(hashTerm, hashTerm.end()));            for(auto it1 = hashTerm.begin() ;it1 != hashTerm.end(); it1++)    {        std::cout <<"Plat ID:"  <<it1->first <<std::endl;        std::cout <<  "Plat UserName & Password"<<it1->second <<std::endl;    }     // 是否存在    bool bb = p->hexists("PLATINFO","test123456789012");    std::cout << "PLATINFO 里 存在 test123456789012:" << bb << std::endl;       // hget - 注意这里,OptionalString 是大部分查询命令的返回值类型,要想转为string 需要加*    OptionalString strValue = p->hget("PLATINFO","test1234567890123");     std::cout<< " test123456789012  的 details :" << *strValue << std::endl;    std::string straa = *strValue;    if(straa.empty())        {           std::cout << "we gete nothing " << std::endl ;        }    std::cout<< " ---- test123456789012  的 details :" << straa << std::endl;     // 测试hkeys    std::vector<std::string> vPaltIDs;    p->hkeys("PLATINFO",std::inserter(vPaltIDs, vPaltIDs.end()));     for(auto vIter = vPaltIDs.begin();vIter != vPaltIDs.end(); vIter ++)    {        std::cout << *vIter << std::endl;    }    return 0;}    //g++ -std=c++11 -I/usr/local/include -L/usr/local/lib -Wl,-rpath=../libc++ -o app testRedisSentinel.cpp -lredis++ -lhiredis -pthread//

连接集群模式的

#include <unistd.h>#include <chrono>#include <tuple>#include <iostream>#include <vector>#include <map>#include <unordered_set>#include <sw/redis++/redis++.h>#include <sw/redis++/sentinel.h>#include <sw/redis++/connection.h>#include <sw/redis++/connection_pool.h>//using namespace std;using namespace sw::redis;using namespace std::chrono;int main(){    ConnectionOptions connection_options;    connection_options.host = "192.168.11.124";  // Required.    connection_options.port = 7001; // Optional. The default port is 6379.    //connection_options.password = "auth";   // Optional. No password by default.    connection_options.db = 0;  // Optional. Use the 0th database by default.     ConnectionPoolOptions pool_options;    pool_options.size = 5;  // Pool size, i.e. max number of connections.    pool_options.wait_timeout = std::chrono::milliseconds(100);      RedisCluster* redisofDB1 = NULL;    try{        redisofDB1 = new RedisCluster(connection_options, pool_options);     }catch (const ReplyError &err) {        printf("RedisHandler-- ReplyError:%s \n",err.what());        return false ;    }catch (const TimeoutError &err) {        printf("RedisHandler-- TimeoutError%s \n",err.what());        return false ;    }catch (const ClosedError &err) {        printf("RedisHandler-- ClosedError%s \n",err.what());        return false ;    }catch (const IoError &err) {        printf("RedisHandler-- IoError%s \n",err.what());        return false ;    }catch (const Error &err) {        printf("RedisHandler-- other%s \n",err.what());        return false ;    }     // 连接成功- 下面开始干活儿。    printf("-----连接成功,下面开始干活儿-----\n");#if 1    //1.先测试一个gethall 用hscan代替得吧    auto cursor = 0LL;    auto pattern = "*";    auto count = 5;    //std::unordered_set<std::string> keys;    std::map<std::string, std::string> hashs;    while (true) {        cursor = redisofDB1->hscan("farm:status:NJTEST0000000005_20200702132812",cursor, pattern, count, std::inserter(hashs, hashs.begin()));         if (cursor == 0) {            break;        }    }    if(hashs.size() < 1)    {        printf("we get nothing !\n");    }    std::cout << "the hashs.size = " <<  hashs.size() << std::endl;    for(auto it1 = hashs.begin() ;it1 != hashs.end(); it1++)    {        std::cout <<"key:"  <<it1->first <<  "Value:"<<it1->second  <<std::endl;    }#endif#if 0    // 2.测试hsetnx     std::cout << "------------------------测试hsetnx---------------------------" << std::endl;    std::string strValue = "SUBMIT$2$TES21129BH2000001$UPDATE$TIME:20200818163607,TYPE:3,VALUE:MjIzLjIyMy4xODcuMzUsMTA1MCxmdGFkbWluLGZ0YWRtaW44MTY0NSxINENfVjEuMy4zN18yMDIwMDgxN19hNDdhLmJpbiww,MODEL:2";    //std::string strfeild = "1597739777";    bool vBol = redisofDB1->hsetnx("farm:command:TES21129BH2000001", std::to_string(1597739778), strValue);        std::cout << "hsetnx wanbi : " << vBol << std::endl;     //3.测试hdel     bool vBol2 = redisofDB1->hdel("farm:command:TES21129BH2000001", strfeild);        std::cout << "hdel wanbi : " << vBol2 << std::endl;     //4.测试del    bool vBol3 = redisofDB1->del("farm:command:NJTEST0000000009");        std::cout << "del wanbi : " << vBol3 << std::endl;     //5.hlen     long long llen = redisofDB1->hlen("farm:status:TST1010191210110_20200701114501");    std::cout<< "the len is :" << llen << std::endl;     //6.测试hset    bool bbb = redisofDB1->hset("farm:clientnum","WUZ11010BC100009","009");    std::cout << "hset finished is :" << bbb << std::endl;      //7.测试expire    redisofDB1->expire("farm:status:NJTEST0000000005_20200624135512",60);#endif     return 0;}

以上就是关于“redis++怎么编译、安装及使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯