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
的特点:
- 可能包含一个值,也可能为空:可以理解为 "有值" 或 "无值" 两种状态
- 模板类型 :
std::optional<T>
中的T
是它可能存储的值的类型(如std::optional<int>
可存储int
或为空) - 需要包含头文件 :使用时需引入
<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.我们自己又想要能够通过外网访问~




