Redis 协议(上)协议介绍

Redis 协议的特点

Redis 协议在一下三个目标之间进行折中:

  • 易于实现
  • 可以高效地被计算机分析
  • 可以很容易地被人类读懂

Redis 协议相当简单,当阅读Redis协议后,我有自己实现Redis协议的想法。本文主要介绍Redis协议,下篇会用Rust语言实现Redis。

Redis 的数据类型

本文使用\r\n表示回车字符(ASCII码13)和换行字符(ASCII码10)。字符不用引号,使用Markdown的方框框住。

1. Null

空数据,发送内容$-1\r\n。比如客户端发送GET key_not_exists,服务端返回(nil),发送的内容是$-1\r\n

2. 空数组

空数组,发送内容*-1\r\n

3. 简单字符串

简单字符串,发送内容以+开头。比如回复OK,发送的内容是+OK\r\n。简单的字符串适合返回可打印字符。

4. 错误字符串

错误字符串,发送内容以-开头。比如某个回复发送的内容是-Expected 2 arguments for SET command\r\n

5. 整数

整数,发送内容以:开头。用来发送一个整数,比如:21\r\n,或者布尔类型,:0\r\n表示假,:1\r\n表示真。

6. 批量字符串

整数,发送内容以$开头。批量字符串返回二进制安全的字符串。比如客户端发GET name,服务端返回yang。服务端传送的内容是$4\r\nyang\r\n。其中,第一个是$,接下来是实际回复长度的数字值4,之后跟\r\n,再后面跟实际回复数据,最后是\r\n

7. 批量数组

非空数组,发送内容以*开头。比如客户端发送GET name,内容是*2\r\n$3\r\nget\r\n$4\r\nname\r\n。表示批量数组长度是2,后面有两条数据。本例批量数组包含两个批量字符串。

你可能感兴趣的:(Redis 协议(上)协议介绍)