Reids原理(2)-通信协议

132 阅读1分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

Redis将所有数据都放在内存中,用一个单线程对外提供服务,单个节点在跑满一个CPU核心的情况下可以达到了10w/s的超高QPS。

RESP

RESP是序列化协议(Reids Serialization Protocol)的简写。它是一种直观的文本协议,优势在于实现过程异常简单,解析性能极好。 Redis协议将传输的数据结构分为5种最小单元类型,单元结束时统一加上回车换行符号\r\n。

  • 单行字符串以"+"符号开头
  • 多行字符串以"$"符号开头,后跟字符串长度
  • 整数值以":"符号开头,后跟整数的字符串形式
  • 错误消息以"-"符号开头
  • 数组以"*"号开头,后跟数组的长度

单行字符串hello world

+hello world\r\n

多行字符串hello world

$11\r\nhello world\r\n

整数1024

:1024\r\n

错误

参数类型错误

-WRONGTYPE Operation against a key holding the world kond of value\r\n

数组[1,2,3]

*3\r\n:1\r\n:2\r\n:3\r\n

NULL

NULL 用多行字符串表示,不过长度要写成-1

$-1\r\n

空串

空串 用多行字符串表示,不过长度要写成0

$0\r\n\r\n

注意这里有两个\r\n。为什么是两个呢?因为两个\r\n之间,隔得是空串