【Redis】RESP协议和库的安装

目录

🐼为什么要有Redis客户端

🐼RESP

🐼安装redis-plus-plus


🐼为什么要有Redis客户端

在我们之前的操作都是基于redis-cli的命令行操作。这样操作有个缺点:效率低,需要我们手动去执行。在日常开发中,其实我们并不是这么做的,而是基于redis的API,来定制化的实现redis客户端,与redis服务器进行网络通信的。即我们手搓一个客户端,用程序来和redis-server通信

可是我们又知道,在网络通信中,传输层以下的协议都是操作系统已经写好的,不能够修改。对于我们程序员来说,只能实现应用层协议,而应用层协议如何实现,要看具体场景,实现的好不好,通信效率高不高?那么就得看水平了。可是我们凭什么能实现redis的客户端呢?既然我们能实现redis客户端,那么也能实现qq的客户端,微信的客户端吗?

答案是No。因为我们无法得知qq,微信的服务器和客户端采用的协议,导致我们编写的qq,微信的客户端程序发送的请求到达服务器,直接被拒绝了,因为连"暗号"都对不上,除非我们能1:1猜出他们所用到的协议。

所以之所以客户端和服务器能通信,是因为开发客户端和服务器的人都知道清楚知道协议的细节!

所以我们作为第三方,也必须要知道客户端和服务器通信的协议。知道redis客户端服务器通信的协议(暗号)咯?是的。在redis官方文档中有协议的介绍。


🐼RESP

在Redis中定制了一个叫做RESP的协议:

英文全称为:Redis serialization protocol (RESP),即定制化的redis客户端服务器通信协议

cpp 复制代码
To communicate with the Redis server, Redis clients use a protocol called Redis Serialization Protocol (RESP). While the protocol was designed specifically for Redis, you can use it for other client-server software projects.

根据官网叙述:

✅RESP有以下优点:

  1. 简单去实现
  2. 解析快速
  3. 可读性高

✅RESP还是基于TCP的,但是又和TCP没有强耦合关系

✅客户端给服务器发送的是reids命令,以数组的形式发送的,服务器根据redis客户端请求的命令,响应返回不同的结果。

协议具体规则,浅浅看一看:

🔷对于简单的字符串Simple strings,前面使用+表示。

比如服务器现在想返回一个OK发送的协议格式就是:

cpp 复制代码
+OK\r\n

客户端收到,parse就得到ok了。

🔷Simple errors

使用"-"表示错误,比如现在有错误。格式就为:

cpp 复制代码
-Error message\r\n

🔷如果是数字,RESP encodes integers in the following way:

cpp 复制代码
:[<+|->]<value>\r\n

🔷Bulk strings

遵循以下规则:

cpp 复制代码
$<length>\r\n<data>\r\n

还有很多。总之,协议一旦定好,就可以通信了。


🐼安装redis-plus-plus

我们已经了解了redis采用的协议,具体在redis协议具体参考文档中都可以查看,但是我们真的要自已手搓一个客户端,然后再来收到应答写parse,构造请求...的客户端吗?

早已经有大佬帮我们实现了redis的客户端,他们已经写好了这些库,我们直接拿来用即可,当然,如果我们有针对性需求,需要定制化redis的客户端,也可以根据redis协议进行改造,或者直接拿着大佬的的源码。毕竟协议都是一样的。

下面如何在我们本地安装好redis客户端呢?使用大佬们写好的库,进行c-s的通信。

有很多已经写好的redis客户端库,

这里我们以redisplusplus为例:redis-plus-plus 是 Redis 的 C++ 客户端库(也常称客户端 SDK),专门用于在 C++ 程序中与 Redis 服务器进行交互,由社区基于 Redis 官方协议开发,是目前主流的 Redis C++ 客户端之一

redis-plus-plus的github链接

安装步骤如下,这里以Ubuntu 22.04.5为例:

🍓在安装redis-plus-plus之前,我们首先需要安装hiredis ,redis-plus-plus库中依赖了,hiredis, hiredis是⼀个 C 语言实现的 redis 客户端。我们直接使用包管理器安装即可

bash 复制代码
apt install libhiredis-dev
# 如果安装失败了,你也可以apt search hiredis源,再选择性安装

🍓下载 redis-plus-plus 源码

bash 复制代码
git clone https://github.com/sewenew/redis-plus-plus.git

🍓编译/安装 redis-plus-plus

使⽤ cmake 构建

bash 复制代码
 cd redis-plus-plus

mkdir build # 构建一个build目录是习惯做法,并非必须,为了让临时文件放到build下,避免污染源目录

cd build

cmake .. # 这个就是build的上级目录的CMakeLists.txt构建出一份Makefile出来
make # 编译
make install # 这⼀步操作需要管理员权限.目的就是帮我们把编译生成的库拷贝到系统指定目录下,保证系统能找到, 如果是⾮ root 用户, 使⽤ sudo make install 执⾏

make编译成功如图:

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

会在 /usr/local/lib/ 中多出⼀系列 libredis 库⽂件

很多C++/C外部库的使用,需要编译安装的都是如此的

至于redis-plus-plus库的使用,熟悉了常用命令,一看就会了。

相关推荐
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大1 天前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
哈__1 天前
多模融合 一体替代:金仓数据库 KingbaseES 重构企业级统一数据基座
数据库·重构
老邓计算机毕设1 天前
SSM医院病人信息管理系统e7f6b(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·医院信息化·ssm 框架·病人信息管理
2601_949613021 天前
flutter_for_openharmony家庭药箱管理app实战+药品分类实现
大数据·数据库·flutter
dyyx1111 天前
使用Scikit-learn进行机器学习模型评估
jvm·数据库·python
挺6的还1 天前
18.缓存
redis
踢足球09291 天前
寒假打卡:2026-01-27
数据库
不想写bug呀1 天前
MySQL索引介绍
数据库·mysql
weixin_499771551 天前
使用Seaborn绘制统计图形:更美更简单
jvm·数据库·python
青春男大1 天前
Redis和RedisTemplate快速上手
java·数据库·redis·后端·spring·缓存