4.客户端(Redis)

1.简介

之前的各种 redis 的基本操作/命令,都是在 redis 命令行客户端,手动执行的,这种操作方式不是我们日常开发中主要的形式。

更多的时候,是使用 redis 的api,来实现定制化的 redis 客户端程序,进一步操作 redis 服务器。

为什么我们能编写出一个自定义的redis 客户端??

我们能不能编写出一个qq的自定义客户端??

不能!!因为他们没有公开自己使用的自定义协议

2.RESP协议

是 Redis 客户端与服务器之间通信使用的专用协议,设计目标是简单易实现、解析高效、人类可读。它定义了客户端与 Redis 服务器之间数据交换的格式规范,所有 Redis 命令和响应都通过 RESP 格式传输。

复制代码
优点:
1.简单好实现
2.快速进行分析
3.肉眼可读

传输层这里基于 TCP,但是和 TCP 又没有强耦合;请求和相应之间的通信模型是一问一答的形式--客户端给服务器发一个请求,服务器返回一个响应。

3.Redis-plus-plus 安装

C++ 操作 redis 的库有很多,我们使用 redis-plus-plus。(库有很多,大同小异)

githup 找第三方库/程序的一个重要渠道!!(可以用加速器watt tools来合法打开)
Github 地址: https://github.com/sewenew/redis-plus-plus

安装 hiredis

redis-plus-plus 是基于 hiredis 实现的.
hiredis 是⼀个 C 语⾔实现的 redis 客⼾端.
因此需要先安装 hiredis. 直接使⽤包管理器安装即可

sql 复制代码
Ubuntu
1.apt install libhiredis-dev

2.下载 redis-plus-plus 源码
git clone https://github.com/sewenew/redis-plus-plus.git

3.编译/安装 redis-plus-plus
Ubuntu
使⽤ cmake 构建

cd redis-plus-plus

mkdir build

cd build

cmake ..

make

make install # 这⼀步操作需要管理员权限. 如果是⾮ root ⽤⼾, 使⽤ sudo make 
install 执⾏.

构建成功后, 会在 /usr/local/include/ 中多出 sw ⽬录, 并且内部包含 redis-plus-plus 的⼀
系列头⽂件.
会在 /usr/local/lib/ 中多出⼀系列 libredis 库⽂件

完事!!!

redis-plus-plus 本体,只能编译安装(使用 ubuntu 会比使用 centos 简单很多)

optional 类型(补充说名)

在 C++ 中,optional 类型(std::optional,C++17 引入)是一种特殊的容器 / 包装类型,用于表示一个 "可能存在或不存在" 的值。它的核心作用是优雅地处理 "值可能缺失" 的场景 ,避免使用特殊值(如 nullptr、-1 等)来表示 "无值" 的情况,让代码更清晰、更安全。

std::optional 的特点:

  1. 可能包含一个值,也可能为空:可以理解为 "有值" 或 "无值" 两种状态
  2. 模板类型 :std::optional<T> 中的 T 是它可能存储的值的类型(如 std::optional<int> 可存储 int 或为空)
  3. 需要包含头文件 :使用时需引入 <optional>

常用操作:

  • 创建:

    cpp

    运行

    复制代码
    std::optional<int> opt1;                // 默认为空(无值)
    std::optional<int> opt2 = 42;           // 包含值 42
    std::optional<int> opt3 = std::nullopt; // 显式指定为空(nullopt 是特殊标记)
  • 判断是否有值:

    cpp

    运行

    复制代码
    if (opt2.has_value()) { ... }  // 方法1:has_value() 返回 bool
    if (opt2) { ... }              // 方法2:隐式转换为 bool(更简洁)
  • 获取值:

    cpp

    运行

    复制代码
    int val = opt2.value();  // 方法1:有值时返回值,无值时抛异常
    int val = *opt2;         // 方法2:有值时返回值,无值时行为未定义(需先判断)
    int val = opt2.value_or(0); // 方法3:有值时返回值,无值时返回默认值 0

适用场景:

  • 函数返回值可能 "不存在" 的情况(如查找操作未找到结果):

    cpp

    运行

    复制代码
    // 查找向量中第一个偶数,找不到则返回空
    std::optional<int> findFirstEven(const std::vector<int>& nums) {
        for (int n : nums) {
            if (n % 2 == 0) return n;
        }
        return std::nullopt; // 无结果
    }
  • 避免使用 "魔法值"(如用 nullptr 表示指针无效,用 -1 表示错误码),让代码意图更明确。简单说,std::optional<T> 就像一个 "可能装着 T 类型数据的盒子"------ 你可以检查盒子里有没有东西,有就拿出来用,没有就做相应处理,比用特殊值表示 "无结果" 更安全、更易读。


1.不能开放 redis 的端口

2.我们自己又想要能够通过外网访问~

相关推荐
高频因子挖掘机28 分钟前
QuantDash 明明安装成功,为什么 Python 还是无法 import?
后端·github·api
瑞克-桑切斯1 小时前
企业生产环境:https部署+nginx高可用(业务不中断)
linux·服务器·数据库
http阿拉丁神猫4 小时前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
不会就选b4 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
Pniubi7 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知9 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工9 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留9 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu10 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
zyseo810 小时前
谷歌SEO 准首页词挖掘脚本:找出排在第 8-20 名的隐藏流量
大数据·数据库·人工智能