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

相关推荐
dixiuapp6 分钟前
设备维修记录系统,从数据沉淀到价值挖掘的跃迁
大数据·数据库·人工智能
想学后端的前端工程师13 分钟前
【Java设计模式实战应用指南:23种设计模式详解】
java·开发语言·设计模式
小白勇闯网安圈20 分钟前
Java的集合
java·开发语言
问道飞鱼23 分钟前
【数据库知识】MySQL 多表关联高效实现指南:场景化方案与底层原理
数据库·mysql·多表关联
马克学长24 分钟前
SSM校园二手交易平台7fut7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·校园闲置资源交易
dblens 数据库管理和开发工具31 分钟前
MySQL :5.7与8.0版创建用户与授权、密码认证插件、角色、密码过期策略
数据库·mysql·dblens·mysql创建用户·mysql设置密码·mysql用户授权
消防大队VUE支队36 分钟前
家里到底连了多少设备?这款开源神器让你一目了然
github
渣渣盟36 分钟前
网络命令大全:轻松解决网络故障
开发语言·php
Mr Tang37 分钟前
Docker日志查看和应用日志查看命令大全
java·开发语言
invicinble38 分钟前
java处理数据合集
java·开发语言