Redis 6.0 使用 HELLO 命令切换 RESP v2 和 RESP3 协议

目录

1. 什么是 RESP 协议

2. RESP 3 实现的类型

同 RESP v2 的 

RESP 3 

3. HELLO 命令切换 RESP 协议


1. 什么是 RESP 协议

RESP(Redis Serialization Protocol)是 Redis 服务端与客户端之间通信的协议。

RESP3 是 RESP version 2 的更新版本。RESP v2 大致从 Redis 2.0 开始支持(其实 1.2 就支持了,只不过 Redis 2.0 是第一个仅支持此协议的版本)。

 

2. RESP 3 实现的类型

同 RESP v2 的 

  • Arrays:N个其他类型的有序集合
  • Blob string:二进制安全字符串
  • Simple string:节省空间的非二进制安全字符串
  • Simple error:节省空间的非二进制安全错误代码和消息
  • Number:有符号的 64 位范围内的整数

RESP 3 

  • Null:一个空值,用来替代 RESP v2 的 *-1 和 $-1 
  • Double:浮点数
  • Boolean:true 或 false
  • Blob error:二进制感觉错误码和消息
  • Verbatim string:二进制安全字符串,应在不进行任何转义或过滤的情况下显示
  • Map:键值对的有序集合。键和值可以是任何其他 RESP3 类型
  • Set:N 个其他类型的无序集合
  • Attribute:与 Map 类似。
  • Push:与 Array 类似。
  • Hello:与 Map 类似。仅用在客户端与服务端建立连接时
  • Big number:无法用数字类型表示的大数字

 

3. HELLO 命令切换 RESP 协议

HELLO [AUTH ]

 HELLO 2 或 HELLO 3 (切换 RESP 协议  2 或 3)

127.0.0.1:6379> HELLO 4
(error) NOPROTO unsupported protocol version
127.0.0.1:6379> HELLO 1
(error) NOPROTO unsupported protocol version
127.0.0.1:6379> HELLO 3
1# "server" => "redis"
2# "version" => "6.0.4"
3# "proto" => (integer) 3
4# "id" => (integer) 4 
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)

 HELLO 2 + AUTH (切换 RESP 协议并切换认证用户)

// 切换到默认用户
127.0.0.1:6379> HELLO 2 AUTH default nopass
 1) "server"
 2) "redis"
 3) "version"
 4) "6.0.4"
 5) "proto"
 6) (integer) 3
 7) "id"
 8) (integer) 4
 9) "mode"
10) "standalone"
11) "role"
12) "master"
13) "modules"
14) (empty array)

// 切换到 helloworld 用户
127.0.0.1:6379> HELLO 2 AUTH helloworld mypass
1# "server" => "redis"
2# "version" => "6.0.4"
3# "proto" => (integer) 3
4# "id" => (integer) 4
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)

返回的 Map 说明

  • "server" => "redis"  // 服务名称
  • "version" => "6.0.4"  // 版本号
  • "proto" => (integer) 3  // 支持的最高协议
  • "id" => (integer) 4   // 客户端连接 ID
  • "mode" => "standalone" //  模式:"standalone", "sentinel", "cluster"
  • "role" => "master"  //  "master" 或 "replica"
  • "modules" => (empty array) // 加载的模块列表

对比 RESP v2 和 RESP3 的 HELLO 命令返回结果,我们可以发现 RESP3 的展示效果更佳友好。

 

你可能感兴趣的:(#,Redis)