前言
上一篇介绍了 Redis 的单线程模型和多线程模型。这节开始介绍 Redis 各个实例之间以及与客户端之间是如何通信的。
Redis 与客户端之间,以及每个实例之间都是通过 TCP 长连接进行通信的,即使多个实例在同一台服务器上运行也是一样。
Redis 通过 TCP 长连接来实现高效的数据传输和低延迟的数据交互,同时也能够避免频繁的建立和关闭网络连接所带来的性能开销。
Redis 在 TCP 协议之上,还定义了 RESP 协议,即 REdis Serialization Protocol,Redis 序列化协议。
Redis 与客户端之间,以及各个 Redis 实例之间通信使用的基本上都是 RESP 协议(除了切片集群中各个节点使用的是 Gossip 协议)。在 Redis6.0 之前通常使用的都是 RESP2.0。接下来将开始详细介绍 RESP 协议。
RESP2.0
RESP 把交互内容分成了客户端请求和服务端响应:
- 在客户端请求中,客户端会给 Redis 发送命令,以及要写入的键和值;
- 在服务器端响应中,Redis 实例会返回读取的值、OK 标识、成功写入的元素个数、错误信息,以及命令。
这些交互内容还可以再进一步细分成七类:
- 命令:即针对不同数据类型的操作命令。例如对 String 类型的 SET、GET 操作等,这些命令就是代表操作语义的字符串。
- 键:键值对中的键,可以直接用字符串表示。