当前位置:网站首页>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 .
边栏推荐
- Redis入门完整教程:有序集合详解
- Is Huatai Securities a nationally recognized securities firm? Is it safe to open an account?
- Advanced area a of attack and defense world misc Masters_ good_ idea
- Insert sort, select sort, bubble sort
- Google Earth Engine(GEE)——Tasks升级,实现RUN ALL可以一键下载任务类型中的所有影像
- Taobao commodity review API interface (item_review get Taobao commodity review API interface), tmall commodity review API interface
- Hit the core in the advanced area of misc in the attack and defense world
- Set up a website with a sense of ceremony, and post it to 1/2 of the public network through the intranet
- The table is backed up in ODPs. Why check m in the metabase_ Table, the logical sizes of the two tables are inconsistent, but the number of
- Sword finger offer 67 Convert a string to an integer
猜你喜欢
Breakpoint debugging under vs2019 c release
LOGO特訓營 第三節 首字母創意手法
PMO: compare the sample efficiency of 25 molecular optimization methods
Attack and defense world misc advanced area can_ has_ stdio?
UML diagram memory skills
Redis: redis configuration file related configuration and redis persistence
Attack and defense world misc advanced grace-50
攻防世界 MISC 進階區 Erik-Baleog-and-Olaf
Redis入门完整教程:事务与Lua
页面关闭前,如何发送一个可靠请求
随机推荐
Summary of index operations in mongodb
攻防世界 MISC 进阶区 3-11
Analysis of the self increasing and self decreasing of C language function parameters
Breakpoint debugging under vs2019 c release
啃下大骨头——排序(二)
攻防世界 MISC 进阶区 hong
Redis入门完整教程:列表讲解
Attack and defense world misc advanced area can_ has_ stdio?
剑指 Offer 65. 不用加减乘除做加法
Detailed explanation of heap sort code
堆排序代码详解
Solana chain application crema was shut down due to hacker attacks
攻防世界 MISC 进阶区 Erik-Baleog-and-Olaf
繁华落尽、物是人非:个人站长该何去何从
蓝队攻防演练中的三段作战
集群的概述与定义,一看就会
Introducing QA into the software development lifecycle is the best practice that engineers should follow
Redis入门完整教程:初识Redis
图片懒加载的原理
Google Earth engine (GEE) - tasks upgrade enables run all to download all images in task types with one click