当前位置:网站首页>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 .
边栏推荐
猜你喜欢

攻防世界 MISC 进阶区 hit-the-core

常用技术指标之一文读懂BOLL布林线指标

Serial port data frame

【室友用一局王者荣耀的时间学会了用BI报表数据处理】

Google Earth engine (GEE) - globfire daily fire data set based on mcd64a1

Mongodb aggregation operation summary

Redis入门完整教程:发布订阅
![[roommate learned to use Bi report data processing in the time of King glory in one game]](/img/06/22dde3fcc0456bd230e1d0cde339ec.png)
[roommate learned to use Bi report data processing in the time of King glory in one game]

串口数据帧

Redis入门完整教程:事务与Lua
随机推荐
Taobao commodity review API interface (item_review get Taobao commodity review API interface), tmall commodity review API interface
攻防世界 MISC 进阶区 hong
LOGO特訓營 第三節 首字母創意手法
In Linux, I call odspcmd to query the database information. How to output silently is to only output values. Don't do this
Attack and defense world misc advanced grace-50
【lua】int64的支持
Analysis of the self increasing and self decreasing of C language function parameters
MySQL Architecture - logical architecture
Why is Dameng data called the "first share" of domestic databases?
Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
Three stage operations in the attack and defense drill of the blue team
Prosperity is exhausted, things are right and people are wrong: where should personal webmasters go
10 schemes to ensure interface data security
La prospérité est épuisée, les choses sont bonnes et mauvaises: Où puis - je aller pour un chef de station personnel?
攻防世界 misc 进阶区 2017_Dating_in_Singapore
Solana chain application crema was shut down due to hacker attacks
页面关闭前,如何发送一个可靠请求
Redis入门完整教程:GEO
Redis入门完整教程:API的理解和使用
Logo special training camp section II collocation relationship between words and graphics