当前位置:网站首页>Redis introduction complete tutorial: client communication protocol
Redis introduction complete tutorial: client communication protocol
2022-07-04 22:53:00 【Gu Ge academic】
Almost all mainstream programming languages have Redis The client of (http://redis.io/clients),
Don't consider Redis The reason why it is very popular , From the perspective of technology, there are two reasons : The first
One , The communication protocol between client and server is TCP Built on top of the agreement . second ,
Redis Formulated the RESP(REdis Serialization Protocol,Redis Serialization protocol ) Realize customer
The normal interaction between the client and the server , This protocol is simple and efficient , It can be parsed by the machine , It's easy
Recognized by humans . For example, the client sends a message set hello world Give the command to the server , according to RESP
Standards for , The client needs to encapsulate it in the following format ( For each line \r\n Separate ):
*3
$3
SET
$5
hello
$5
world
such Redis The server can follow RESP It is interpreted as set hello world command , After execution
The format of the reply is as follows :
+OK
You can see that in addition to the command (set hello world) And return results (OK) It also contains
Some special characters and numbers , These formats will be described below .
1. Send command format
RESP The format of a command is as follows ,CRLF representative "\r\n".
*< The number of arguments > CRLF
$< Parameters 1 Number of bytes > CRLF
< Parameters 1> CRLF
...
$< Parameters N Number of bytes > CRLF
< Parameters N> CRLF
Still in set hell world This command describes .
The number of parameters is 3 individual , So the first act :
*3
The number of parameter bytes is 355, So the following behaviors :
$3
SET
$5
hello
$5
world
One thing to note is that , The above is just the result of formatting the display , The actual transmission format is as follows
Code , The whole process is as shown in the figure 4-1 Shown :
*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n
2. Return the result format
Redis There are five types of returned results , Pictured 4-2 Shown :
· State the reply : stay RESP The first byte in the is "+".
· Error response : stay RESP The first byte in the is "-".
· Integer reply : stay RESP The first byte in the is ":".
· String reply : stay RESP The first byte in the is "$".
· Multiple string replies : stay RESP The first byte in the is "*".
We know redis-cli Only the final execution result can be seen , That's because redis-cli Itself is
according to RESP For result analysis , So there is no intermediate result ,redis-cli.c The source code ends with the command
The analytic structure of the fruit is as follows :
static sds cliFormatReplyTTY(redisReply *r, char *prefix) {
sds out = sdsempty();
switch (r->type) {
case REDIS_REPLY_ERROR:
// Handle error replies
case REDIS_REPLY_STATUS:
// Process status reply
case REDIS_REPLY_INTEGER:
// Handle integer replies
case REDIS_REPLY_STRING:
// Handle string replies
case REDIS_REPLY_NIL:
// Processing empty
case REDIS_REPLY_ARRAY:
// Handle multiple string replies
return out;
}
For example, to perform set hello world, The return is OK, You can't see the plus sign :
127.0.0.1:6379> set hello world
OK
In order to see Redis Returned by the server “ real ” result , have access to nc command 、telnet life
Make 、 Even write a socket Program simulation . Let's say nc Command to demonstrate , use first
nc127.0.0.16379 Connect to Redis:
nc 127.0.0.1 6379
State the reply :set hello world The return result of is +OK:
set hello world
+OK
Error response : because sethx This command does not exist , So the return result is "-" Number plus error
Error message :
sethx
-ERR unknown command 'sethx'
Integer reply : When the execution result of the command is an integer , The result is an integer reply , for example
incr、exists、del、dbsize The returned results are all integers , For example, to perform incr counter Return results
Namely “:” Add an integer :
incr counter
:1
String reply : When the execution result of the command is a string , The return result is string return
complex . for example get、hget The returned results are all strings , for example get hello Result
by “$5\r\nworld\r\n”:
get hello
$5
world
Multiple string replies : When the execution result of the command is multiple strings , The return result is more
String reply . for example mget、hgetall、lrange The command will return multiple results , For example, the following
operation :
use first mset Set multiple key value pairs :
mset java jedis python redis-py
+OK
And then execute mget The command returns multiple results , first *2 Represents the number of returned results , Back
The format of is consistent with the string reply :
mget java python
*2
$5
jedis
$8
redis-py
There is one caveat , Whether it's a string reply or multiple string replies , If there is nil
value , So it will return $-1.
for example , Execute on a nonexistent key get operation , The return result is :
get not_exist_key
$-1
If a batch operation contains one item, it is nil The result of the value , So the return result is as follows :
mget hello not_exist_key java
*3
$5
world
$-1
$5
jedis
With RESP The protocol format of sending command and returning result provided , Various programming languages can
To use it to achieve the corresponding Redis client , The following two sections will introduce Java and Python Two programming
Linguistic Redis client .
边栏推荐
- Introducing QA into the software development lifecycle is the best practice that engineers should follow
- [try to hack] wide byte injection
- Create Ca and issue certificate through go language
- Redis入门完整教程:API的理解和使用
- 华泰证券是国家认可的券商吗?开户安不安全?
- Microservices -- Opening
- Redis démarrer le tutoriel complet: Pipeline
- Set up a website with a sense of ceremony, and post it to 1/2 of the public network through the intranet
- Attack and defense world misc advanced area Hong
- The Sandbox 和数字好莱坞达成合作,通过人力资源开发加速创作者经济的发展
猜你喜欢
串口数据帧
Redis入门完整教程:列表讲解
Detailed explanation of heap sort code
[roommate learned to use Bi report data processing in the time of King glory in one game]
Attack and defense world misc advanced grace-50
Redis入门完整教程:有序集合详解
Redis入門完整教程:Pipeline
SPSS installation and activation tutorial (including network disk link)
On-off and on-off of quality system construction
Redis入门完整教程:键管理
随机推荐
关于栈区、堆区、全局区、文字常量区、程序代码区
通过Go语言创建CA与签发证书
Redis入门完整教程:API的理解和使用
It is said that software testing is very simple, but why are there so many dissuasions?
Unity vscode emmylua configuration error resolution
[Lua] Int64 support
Redis入门完整教程:哈希说明
MYSQL架构——逻辑架构
Serial port data frame
[the 2023 autumn recruitment of MIHA tour] open [the only exclusive internal push code of school recruitment eytuc]
Logo Camp d'entraînement section 3 techniques créatives initiales
剑指 Offer 67. 把字符串转换成整数
Logo special training camp section II collocation relationship between words and graphics
Hit the core in the advanced area of misc in the attack and defense world
Common methods in string class
Advanced area of attack and defense world misc 3-11
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
Insert sort, select sort, bubble sort
LOGO特训营 第二节 文字与图形的搭配关系
In Linux, I call odspcmd to query the database information. How to output silently is to only output values. Don't do this