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

C++ 连接 Redis:redis-plus-plus 安装与使用入门指南

前言

在现代应用开发中,Redis 以其卓越的性能和丰富的数据结构,已成为缓存、消息队列和数据存储等场景的首选。对于 C++ 开发者而言,如何高效、稳定地与 Redis 服务器进行交互是一个常见的需求。本文旨在提供一个详尽的入门指南,帮助 C++ 开发者快速上手 redis-plus-plus——一个功能强大且易于使用的 C++ Redis 客户端库。

本文将首先简要介绍 Redis 客户端的基本概念及其核心通信协议 RESP,为您奠定理论基础。随后,我们将通过详细的步骤,手把手地指导您如何在 Linux 环境(以 Ubuntu 为例)下安装 redis-plus-plus 及其依赖 hiredis。最后,通过一个经典的 “Hello World” 示例,演示如何编写、编译并运行您的第一个 C++ Redis 程序,带您真正迈出在 C++ 中驾驭 Redis 的第一步。


Redis 客户端:基本介绍与 RESP 协议解析

Redis 作为一款高性能的内存数据库,其强大的功能需要通过客户端与服务器进行交互来实现。了解 Redis 客户端及其通信协议对于高效使用 Redis 至关重要。本文将对 Redis 客户端进行基本介绍,并深入解析其核心通信协议——RESP。

Redis 客户端基本介绍

Redis 客户端是与 Redis 服务器进行通信的程序或库。它负责将用户的命令发送到 Redis 服务器,并接收和解析服务器返回的响应。客户端可以分为三大类:

  • 命令行客户端 (CLI): 这是最基础的 Redis 客户端,例如 redis-cli。它允许开发者直接在终端中输入 Redis 命令并查看结果,非常适合用于调试和管理任务。
  • 图形用户界面 (GUI) 客户端: 为了更直观地管理 Redis 中的数据,社区开发了许多 GUI 客户端。这些工具通常提供树状的键值展示、数据增删改查的可视化操作界面,以及服务器状态监控等功能。常见的 GUI 客户端包括 Redis Desktop Manager (RDM)、Another Redis Desktop Manager 和 Tiny RDM 等。
  • 编程语言客户端库: 在应用程序中与 Redis 交互时,开发者会使用特定编程语言的 Redis 客户端库。这些库封装了与 Redis 服务器的通信细节,提供了简洁的 API 供开发者调用。几乎所有主流的编程语言,如 Java (Jedis, Lettuce)、Python (redis-py)、Node.js (node-redis) 等,都有成熟的 Redis 客户端库。
认识 RESP (REdis Serialization Protocol)

Redis 客户端与服务器之间的通信遵循一个名为 RESP (REdis Serialization Protocol) 的协议。该协议在 Redis 1.2 中引入,并从 Redis 2.0 开始成为与 Redis 服务器通信的标准方式。RESP 的设计目标是实现简单、解析快速且具有人类可读性。

RESP 协议的特点:

  • 实现简单: 协议规则清晰明了,易于在不同的客户端库中实现。
  • 解析快速: 协议的格式设计使得解析器可以高效地处理数据,对性能影响小。
  • 人类可读: RESP 传输的数据格式直观,便于开发者在调试过程中直接阅读和理解。
  • 二进制安全: 采用前缀长度来传输数据块,确保了二进制数据的安全传输。

RESP 数据类型:

RESP 协议支持多种数据类型,通过第一个字节的不同来区分:

  • 简单字符串 (Simple Strings):+ 开头,以 \r\n (CRLF) 结尾。例如 +OK\r\n
  • 错误 (Errors):- 开头,以 \r\n 结尾。例如 -ERR unknown command 'foobar'\r\n
  • 整数 (Integers):: 开头,以 \r\n 结尾。例如 :1000\r\n
  • 批量字符串 (Bulk Strings): 用于表示长度最大为 512MB 的单个二进制安全字符串。它以 $ 开头,后跟字符串的字节数,然后是 CRLF,接着是实际的字符串数据,最后再以 CRLF 结尾。例如,表示字符串 “hello”:$5\r\nhello\r\n
  • 数组 (Arrays): 客户端向服务器发送命令以及服务器返回元素集合时使用。它以 * 开头,后跟数组中元素的个数,然后是 CRLF,接着是数组中的各个元素(可以是任意 RESP 类型)。例如,发送命令 SET mykey "hello" 会被编码为:
    *3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$5\r\nhello\r\n
    

请求-响应模型:

Redis 的通信基于请求-响应模型。客户端将命令以 RESP 数组的形式发送给服务器。服务器处理命令后,将结果以相应的 RESP 数据类型返回给客户端。这种交互模式是 Redis 通信的核心。

安装 redis-plus-plus

C++ 操作 Redis 的库有很多,此处我们选择 redis-plus-plus

Github 地址: https://github.com/sewenew/redis-plus-plus

redis-plus-plus 依赖于 C 语言的 Redis 客户端库 hiredis,因此我们需要先安装它。
image.png

第一步:安装 hiredis
  • 在 Ubuntu 上:

    sudo apt update
    sudo apt install libhiredis-dev
    

    image.png

  • 在 CentOS 上:

    sudo yum install hiredis-devel.x86_64
    
第二步:编译安装 redis-plus-plus
  1. 克隆 redis-plus-plus 仓库:

    git clone https://github.com/sewenew/redis-plus-plus.git
    

    image.png

    提示: 如果 git clone 出现下图所示的证书相关错误:
    image.png

    可以尝试通过以下命令更新系统的 CA 证书(以 Ubuntu 为例):

    sudo apt-get update
    sudo apt-get install --reinstall ca-certificates
    

    之后再次尝试 git clone

  2. 进入源码目录并使用 CMake 构建和编译:
    redis-plus-plus 使用 CMake 作为构建工具。为了保持源码目录的整洁,我们推荐在 build 目录下进行编译。

    cd redis-plus-plus
    

    image.png

    CMake 通过读取源码根目录下的 CMakeLists.txt 文件来生成 Makefile。
    image.png

    按照官方教程,依次执行以下命令:

    mkdir build
    cd build
    cmake ..
    make
    

    注意: 如果系统中没有安装 CMake,请先执行 sudo apt install cmake (Ubuntu) 或 sudo yum install cmake (CentOS)进行安装。

    cmake .. 命令会根据上级目录的 CMakeLists.txt 生成 Makefile。

    make 命令执行编译,编译成功后效果如下:
    image.png

    编译生成的文件都存放在 build 目录下,如下图红框所示:
    image.png

  3. 安装到系统目录:
    编译完成后,为了方便在项目中链接,我们将其安装到系统目录中(通常是 /usr/local)。

    sudo make install
    

    image.png

至此,redis-plus-plus 库已成功安装到您的系统中。

编写 “Hello World”

接下来,我们编写一个简单的 C++ 程序来测试与 Redis 服务器的连接。

第一步:定位头文件和库文件

在编写代码和编译之前,我们需要知道 redis-plus-plus 的头文件和库文件的位置。

  • 查找头文件:

    ls /usr/local/include/sw/redis++
    

    image.png
    我们需要在代码中包含的就是 redis++.h 这个头文件。

  • 查找库文件:

    ls /usr/local/lib/
    

    image.png
    编译时需要链接 libredis++.alibredis++.so

第二步:编写代码 (hello.cc)
#include <iostream>
// 引入 redis-plus-plus 头文件
#include <sw/redis++/redis++.h>int main() {try {// 创建 Redis 对象,构造函数中指定 Redis 服务器的地址和端口// "tcp://127.0.0.1:6379" 表示连接本地(127.0.0.1)的 6379 端口sw::redis::Redis redis("tcp://127.0.0.1:6379");// 调用 ping 方法,测试与服务器的连接// 如果连接成功,服务器会返回 "PONG"std::string result = redis.ping();std::cout << "Ping result: " << result << std::endl;} catch (const sw::redis::Error &e) {// 处理可能的连接异常std::cerr << "Redis error: " << e.what() << std::endl;}return 0;
}

说明: 6379 是 Redis 的默认端口。我们可以通过 netstat 命令确认 Redis 服务器正在监听此端口。

netstat -anp | grep 6379

image.png

第三步:编译程序

编译时,我们需要告诉编译器头文件的位置,并链接 redis++hiredis 的库文件以及线程库。

方法一:直接使用 g++ 命令

g++ hello.cc -o hello -I/usr/local/include -L/usr/local/lib -lredis++ -lhiredis -pthread

方法二:使用 Makefile (推荐)
为了简化编译流程,我们可以创建一个 Makefile 文件。首先需要找到 hiredis 的静态库路径。

find /usr/ -name libhiredis.a

image.png
在 Ubuntu 上,路径通常是 /usr/lib/x86_64-linux-gnu/libhiredis.a

创建 Makefile 文件:

hello:hello.ccg++ -std=c++17 -o $@ $^ /usr/local/lib/libredis++.a /usr/lib/x86_64-linux-gnu/libhiredis.a -pthread.PHONY:clean
clean:rm hello

将上述内容保存为 Makefile 后,只需在终端执行 make 命令即可完成编译。

第四步:运行程序
./hello

如果一切正常,您将看到如下输出,这表明 C++ 程序已成功连接到 Redis 服务器!image.png


总结

通过本文的引导,您不仅了解了 Redis 客户端与服务器通信的底层协议 RESP,更重要的是,您已经掌握了在 C++ 项目中集成 Redis 的关键技能。我们从环境准备开始,详细讲解了 hiredisredis-plus-plus 的安装过程,并最终通过一个简单的 ping 程序验证了环境的正确性和库的可用性。

现在,您已经拥有了一个可以工作的 C++ Redis 开发环境。以此为起点,您可以继续探索 redis-plus-plus 提供的丰富 API,将 Redis 的各种命令(如 SET, GET, HSET, LPUSH 等)无缝地集成到您的应用程序中,从而充分利用 Redis 带来的高性能和强大功能。


文章转载自:

http://8VK9mICg.xpzrx.cn
http://eNpmgktZ.xpzrx.cn
http://PrkyZdKv.xpzrx.cn
http://sIRtwsIX.xpzrx.cn
http://NvPsQ2eB.xpzrx.cn
http://WPLly21h.xpzrx.cn
http://2r7KcMC0.xpzrx.cn
http://RW8T7KuU.xpzrx.cn
http://rf8mkSfJ.xpzrx.cn
http://KIXw23gr.xpzrx.cn
http://XdKOSad9.xpzrx.cn
http://423hbFUy.xpzrx.cn
http://KILszj9t.xpzrx.cn
http://eYyLFmXR.xpzrx.cn
http://s2cEAaDV.xpzrx.cn
http://w5dm74Hh.xpzrx.cn
http://Z2U4cauE.xpzrx.cn
http://UMOxCWGx.xpzrx.cn
http://JsnR7HlW.xpzrx.cn
http://wsJHtMGD.xpzrx.cn
http://cWwBr04M.xpzrx.cn
http://H2THa4L6.xpzrx.cn
http://LgBPZut6.xpzrx.cn
http://VkZOVGUi.xpzrx.cn
http://lFcim5JW.xpzrx.cn
http://kYEXoBKE.xpzrx.cn
http://r9QeAZfZ.xpzrx.cn
http://dRg4Y02j.xpzrx.cn
http://t7wXD2HL.xpzrx.cn
http://RNFDEs61.xpzrx.cn
http://www.dtcms.com/a/371336.html

相关文章:

  • K8s访问控制(二)
  • PerfTest:轻量高性能压测工具,兼容 HTTP/1/2/3、WebSocket,并带实时监控
  • 【Linux基础】fdisk命令详解:从入门到精通的磁盘分区管理完全指南
  • 【从零开始学习Redis】秒杀优化——阻塞队列、消息队列实现异步秒杀
  • 【基于深度学习的中草药识别系统】
  • AI 驱动数据分析:开源 SQLBot 项目探索,基于大模型和 RAG 实现精准问数与图表挖掘
  • 延迟 队列
  • 宋红康 JVM 笔记 Day14|垃圾回收概述
  • 【ICCV2025】计算机视觉|即插即用|ESC:颠覆Transformer!超强平替,ESC模块性能炸裂!
  • 手机能看、投屏 / 车机不能看与反向链接验证类似吗?
  • Xilinx ZYNQ 开发环境中搭建 Qt 环
  • leetcode909.蛇梯棋
  • JAVA NIO学习笔记基础强化学习总结
  • 基于51单片机手机无线蓝牙APP控制风扇调速设计
  • 力扣hot100:相交链表与反转链表详细思路讲解(160,206)
  • 如何在 DevOps 管道中实现 AI?
  • 【Java基础07】面向对象进阶
  • 动态维护有效区间:滑动窗口
  • 桌面时间 Catime
  • 解锁服务器网络配置新姿势:Wisdom SSH 助力之旅
  • 设计模式:状态模式(State Pattern)
  • 【ARM基础知道】
  • SpringCloud Alibaba微服务--Gateway使用
  • 基于脚手架微服务的视频点播系统-播放控制部分
  • 【C++详解】C++ 智能指针:使用场景、实现原理与内存泄漏防治
  • 【iOS】push,pop和present,dismiss
  • HiCMAE 论文复现:基于 RAVDESS 数据集的音视频情感识别
  • axios的两种异步方式对比
  • uniapp结合uview制作美食页面
  • Spark mapreduce 的一个用法