当前位置: 首页 > news >正文

QT聊天项目DAY09

1. 安装Redis

直接从老师的网盘下载

链接: https://pan.baidu.com/s/1v_foHZLvBeJQMePSGnp4Ow?pwd=yid3 提取码: yid3

    启动Redis服务看一下,启动成功了

    .\redis-server.exe .\redis.windows.conf

    启动客户端看一下

    2. 配置redis库,调用API

    编译一下

    在BoostNetLib文件夹下新建Redis文件夹,并将Redis-3.10文件夹下的src和deps拷过来

    新建一个lib文件夹

    2.1 配置Redis环境

    2.2 代码测试Redis

    #include "hiredis.h"
    void TestRedis() {//连接redis 需要启动才可以进行连接
    //redis默认监听端口为6387 可以再配置文件中修改redisContext* c = redisConnect("127.0.0.1", 6379);if (c->err){printf("Connect to redisServer faile:%s\n", c->errstr);redisFree(c);        return;}printf("Connect to redisServer Success\n");std::string redis_password = "123456";redisReply* r = (redisReply*)redisCommand(c, "AUTH %s", redis_password);if (r->type == REDIS_REPLY_ERROR) {printf("Redis认证失败!\n");}else {printf("Redis认证成功!\n");}//为redis设置keyconst char* command1 = "set stest1 value1";//执行redis命令行r = (redisReply*)redisCommand(c, command1);//如果返回NULL则说明执行失败if (NULL == r){printf("Execut command1 failure\n");redisFree(c);        return;}//如果执行失败则释放连接if (!(r->type == REDIS_REPLY_STATUS && (strcmp(r->str, "OK") == 0 || strcmp(r->str, "ok") == 0))){printf("Failed to execute command[%s]\n", command1);freeReplyObject(r);redisFree(c);        return;}//执行成功 释放redisCommand执行后返回的redisReply所占用的内存freeReplyObject(r);printf("Succeed to execute command[%s]\n", command1);const char* command2 = "strlen stest1";r = (redisReply*)redisCommand(c, command2);//如果返回类型不是整形 则释放连接if (r->type != REDIS_REPLY_INTEGER){printf("Failed to execute command[%s]\n", command2);freeReplyObject(r);redisFree(c);        return;}//获取字符串长度int length = r->integer;freeReplyObject(r);printf("The length of 'stest1' is %d.\n", length);printf("Succeed to execute command[%s]\n", command2);//获取redis键值对信息const char* command3 = "get stest1";r = (redisReply*)redisCommand(c, command3);if (r->type != REDIS_REPLY_STRING){printf("Failed to execute command[%s]\n", command3);freeReplyObject(r);redisFree(c);        return;}printf("The value of 'stest1' is %s\n", r->str);freeReplyObject(r);printf("Succeed to execute command[%s]\n", command3);const char* command4 = "get stest2";r = (redisReply*)redisCommand(c, command4);if (r->type != REDIS_REPLY_NIL){printf("Failed to execute command[%s]\n", command4);freeReplyObject(r);redisFree(c);        return;}freeReplyObject(r);printf("Succeed to execute command[%s]\n", command4);//释放连接资源redisFree(c);
    }
    

    2.3 什么是Docker

    Docker像是一个程序+运行环境打包后的虚拟App,由Docker平台来调度运行它

    Docker下载东西会先去查找本地资源有没有下载,如果没有下载会去尝试远程下载

    运行sudo docker images命令查看到docker下面没有任何东西,所以会尝试去远程下载

    远程下载时,docker客户端尝试从docker Hub拉去镜像,但遇到了连接超时的问题

    docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).

    其实本质上就是从远程的商店下载东西,直接去远程官网看一下

    "https://registry-1.docker.io/v2/"

    2.4 Docker安装Redis的报错解析

    1. 检查网络连接

    1.1 测试是否可以访问Docker Hub
    curl -v https://registry-1.docker.io/v2/

    1.2 Ping测试:

    检查是否能够访问外网

    ping registry-1.docker.io
    

    能否直接在docker官网安装redis然后再导入到linux中最后使用docker指令挪到images中

    2.5 离线导入Docker镜像

    2.5.1 在联网的机器上下载Redis镜像

    docker pull redis:latest
    

    导出一个.tar文件

    docker save -o redis_latest.tar redis:latest
    

    2.5.2 将文件拷贝到目标Linux系统

    2.5.3 在目标Linux上导入Redis镜像

    docker load -i redis_latest.tar
    

    2.5.4 运行Redis容器

    docker run -d --name myredis -p 6379:6379 redis
    

    2.6 配置国内镜像加速器

    1. 配置daemon.json

    sudo nano /etc/docker/daemon.json{"registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
    }/* 重启Docker服务 */
    sudo systemctl daemon-reexec
    sudo systemctl restart docker
    

    如果还是无效,采用阿里云容器镜像服务

    2.7 阿里云容器镜像

    2.8 最终解决方案

    2.4 2.5 2.6 2.7 方法都没有用,可能就是网络环境的问题,从2.5 上能够得到解决方案 ,离线导入Redis镜像,网络上遇到这种问题的人肯定很多,所以肯定是有Redis的离线镜像的

    1. 使用国内镜像源拉取Redis的离线镜像

    sudo docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/redis:7.0.12
    

    2. 保存镜像为.tar 文件

    docker save -o redis.tar swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/redis:7.0.12
    

    3. 将VMware与windows共享

    which vmhgfs-fuse
    

    sudo mkdir -p /mnt/hgfs
    sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
    ls /mnt/hgfs

    cp ~/redis.tar /mnt/hgfs/vmshare/
    

    每次都需要手动挂载一下

    2.9 启动images中的redis

    上述的步骤只是将软件安装到了手机上,但是还没有真正的运行起来,需要使用docker运行起来

    先给已有镜像起一个简短的名字

    docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/redis:7.0.12 redis:7.0.12
    

    然后运行镜像

    docker run -d --name *****-redis -p 6380:6379 redis:7.0.12 --requirepass "*********"
    

    使用docker ps 查看正在运行的容器

    docker ps 查看所有容器

    docker start (容器名字) 启动容器

    使用redisDesktopManager建立连接

    redis使用docker ps命令查看启动成功,使用sudo netstat -tulnp | grep 6380  查看端口号,确实有在监听

    一切都没有问题,应该是网络模式出问题了

    2.10 代码连接redis服务

    3. 远程redis服务的困惑

    刚刚做了这么多,费了老大的劲在linux上使用docker部署redis,首先采用国内的网站下载被人已经下载好的离线redis镜像源到images中

    然后采用docker run 启动,为什么我在代码中就能连上远程的了呢?

    redisContext* c = redisConnect("81.68.86.146", 6380);

    现在才后知后觉,原来用的是老师的服务器

    既然不能用云服务器,索性linux上我也不管了,专心搞一套逻辑,跨平台先放下。

    然后采用本地连接windows上的redis,发现redis无法启动,查看原因是端口号已经绑定以及Ip地址没有找到

    所以更换为本机的本机循环地址和ip地址,更换端口号

    用c++写的服务端来尝试连接,连接失败

    可能是密码没有写,添加密码再次连接,连接成功

    下一章,redis连接池,gogogo

    相关文章:

  1. 基于开源链动2+1模式AI智能名片S2B2C商城小程序的分销价格管控机制研究
  2. 【icpc陕西省赛】树的最大深度+基环树找环的大小
  3. 当体育数据API遇上WebSocket:一场技术互补的「攻防战」
  4. AI Agent开发第58课-使用梯度提升预测门店早餐预订取消率高的原因和分析
  5. 水印落幕 7.0 | 专门用于去除图片和视频中水印的工具,支持自定义水印添加
  6. jQuery:全面指南与深度解析
  7. Kepware 连接Modbus TCP/IP
  8. C语言初阶--数组
  9. 005 权限的理解
  10. leetcode刷题日记——随机链表的复制
  11. Prompt(提示词)工程师,“跟AI聊天”
  12. 约瑟夫josephu问题
  13. 2025-05-07 Unity 网络基础8——UDP同步异步通信
  14. 【EasyPan】saveShare代码分析
  15. 企业智能化第一步:用「Deepseek+自动化」打造企业资源管理的智能中枢
  16. DSENT (Design Space Exploration of Networks Tool) 配合gem5
  17. day 14 SHAP可视化
  18. C++:买房子
  19. Vue——前端vue3项目使用汉字转拼音
  20. #黑马点评#(一)登录功能
  21. 中国工程院院士、国医大师石学敏逝世
  22. 这座古村,藏着多少赣韵风华
  23. 巴基斯坦外长:近期军事回应是自卫措施
  24. 国常会:研究深化国家级经济技术开发区改革创新有关举措等
  25. 总奖池超百万!第五届七猫现实题材征文大赛颁奖在即
  26. 第一集|《刑警的日子》很生活,《执法者们》有班味