Redis 客户端和服务器端进行命令和数据交互时的编码格式

RESP 2 协议

RESP 2 协议定义了 Redis 客户端和服务器端进行命令和数据交互时的编码格式。

RESP 2 提供了 5 种类型的编码格式,包括简单字符串类型、长字符串类型、整数类型、错误类型和数组类型。

为了区分这 5 种类型,RESP 2 协议使用了 5 种不同的字符作为这 5 种类型编码结果的第一个字符,分别是 +、 $、:、- 和 *。$字符后面会紧跟着一个数字,这个数字表示字符串的实际长度。

RESP 2 协议是文本形式的协议,实现简单,可以减少客户端开发出现的 Bug,而且可读性强,便于开发调试。当你需要开发定制化的 Redis 客户端时,就需要了解和掌握 RESP 2 协议。

RESP 2 协议的一个不足就是支持的类型偏少,所以,Redis 6.0 版本使用了 RESP 3 协议。

RESP 3 协议

和 RESP 2 协议相比,RESP 3 协议增加了对浮点数、布尔类型、有序字典集合、无序集合等多种类型数据的支持。不过,这里,有个地方需要你注意,Redis 6.0 只支持 RESP 3,对 RESP 2 协议不兼容,所以,如果你使用 Redis 6.0 版本,需要确认客户端已经支持了 RESP 3 协议,否则,将无法使用 Redis 6.0。

最后,我也给你提供一个小工具。如果你想查看服务器端返回数据的 RESP 2 编码结果,就可以使用 telnet 命令和 redis 实例连接,执行如下命令就行:

telnet 实例IP 实例端口

telnet 实例IP 实例端口接着,你可以给实例发送命令,这样就能看到用 RESP 2 协议编码后的返回结果了。当然,你也可以在 telnet 中,向 Redis 实例发送用 RESP 2 协议编写的命令操作,实例同样能处理。

小测验

假设 Redis 实例中有一个 List 类型的数据,key 为 mylist,value 是使用 LPUSH 命令写入 List 集合的 5 个元素,依次是 1、2、3.3、4、hello,当执行 LRANGE mylist 0 4 命令时,实例返回给客户端的编码结果是怎样的?

127.0.0.1:6479> LPUSH mylist 1 2 3.3 4 hello
(integer) 5
127.0.0.1:6479> LRANGE mylist 0 4
1) "hello"
2) "4"
3) "3.3"
4) "2"
5) "1"

telnet 实例IP 实例端口

telnet 实例IP 实例端口

执行结果


Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

执行 LRANGE 命令

”’sh。 兰奇 0 4 *5 $5 你好 $1 4 $3 3.3 $1 2 $1 1

本页链接:https://www.haoruan.net/237.html

没有账号?注册  忘记密码?