redis 对于很多编程语言都有对应的客户端,例如c++中的hiredis,java中的jedis。
这些客户端的底层又是如何实现的呢 ?
在redis官方文档中有相关介绍,底层使用tcp发送 RESP格式的协议。
RESP简单来说就是一套字符串解析规则,有点类似于json中的大括号{}表示对象,方括号[ ]表示数组一样,都是用来解析字符串的。
官方文档
- 简单的字符串以"+" 开头
- 错误以 " - " 开头
- 整数以 ": " 开头
- 大容量字符串以 " $ " 开头,紧接着是一个数字表示长度
- 数组以 " * " 开头,也是紧随着一个数字,表示数组长度
在resp中不同部分会用 “\r\n” 隔开
In RESP, different parts of the protocol are always terminated with “\r\n” (CRLF).
FOR EXAMPLE 以下例子都可使用telnet客户端模拟
telnet 127.0.0.1 6379
--> keys *
RESP Simple Strings
set company Google.co
--> +OK\r\n
RESP Errors
keys
--> -ERR wrong number of arguments for 'keys' command
RESP Integers
set name "zhangSan"
--> +OK\r\n
exists name
--> :1\r\n
RESP Bulk Strings
get name
--> $8\r\nzhangSan\r\n
RESP Arrays
set name "zhangSan"
set age 123
keys *
--> *2\r\n$4\r\nname\r\n$3\r\nage\r\n