【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库的使用,熟悉了常用命令,一看就会了。

相关推荐
@淡 定3 小时前
Redis热点Key独立集群实现方案
数据库·redis·缓存
laocooon5238578863 小时前
mysql,100个题目。
数据库·sql·mysql
Web极客码3 小时前
如何在Ubuntu服务器上安装和配置BIND9
服务器·数据库·ubuntu
吳所畏惧3 小时前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
W001hhh4 小时前
数据库实训Day004上午
数据库
funfan05174 小时前
【运维】MySQL数据库全量备份与恢复实战指南:从入门到精通
运维·数据库·mysql
+VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
tq10865 小时前
通用数据引用表示法:基于协议-URI-JSONPath的简洁数据定位规范
数据库
+VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
manuel_897575 小时前
六 系统安全
网络·数据库·系统安全