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.我们自己又想要能够通过外网访问~

相关推荐
谷哥的小弟3 分钟前
SQLite MCP服务器安装以及客户端连接配置
服务器·数据库·人工智能·sqlite·大模型·源码·mcp
txinyu的博客6 分钟前
结合游戏场景解析UDP可靠性问题
java·开发语言·c++·网络协议·游戏·udp
djimon8 分钟前
06年老电脑复活Ubuntu14.04配置Python网站爬自动化
开发语言·python·自动化
雾岛听蓝12 分钟前
探索C++继承机制
开发语言·c++
1.14(java)18 分钟前
掌握数据库约束:确保数据精准可靠
java·数据库·mysql·数据库约束
Codeking__22 分钟前
Redis——value的数据类型与单线程工作模型
java·数据库·redis
rchmin23 分钟前
MySQL主从复制原理详解
数据库·mysql
人道领域24 分钟前
【零基础学java】(等待唤醒机制,线程池补充)
java·开发语言·jvm
Coding_Doggy24 分钟前
GitHub PR流程
github
智算菩萨27 分钟前
【Python自然语言处理】基于NLTK库的英文文本词频统计系统实现原理及应用
开发语言·python·自然语言处理