目录
🐼为什么要有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有以下优点:
- 简单去实现
- 解析快速
- 可读性高
✅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++ 客户端之一
安装步骤如下,这里以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库的使用,熟悉了常用命令,一看就会了。