Redis-RESP の通信プロトコルについて説明する記事
本篇文章带大家了解一下Redis中的通信协议,介绍一下RESP协议、数据结构的5种单元类型,希望对大家有所帮助!
RESP
RESP(Redis Serialization Protocol)是Redis序列化协议的简写,该协议是纯文本协议,实现过程简单,解析性能较好。【相关推荐:Redis视频教程】
5种单元类型
Redis协议将传输的数据结构分为5种最小的单元类型,单元结束时统一加上回车换行符号\r\n。
1. 单行字符串以 + 符号开头
例:+hello world\r\n
2. 多行字符串以 $ 符号开头,后跟字符串长度
例:$11\r\nhello world\r\n
多行字符串也可以用于表示单行字符串
3. 整数值以 : 符号开头,后跟整数的字符串形式
例::1024\r\n
4. 错误信息以 - 符号开头
参数类型错误
例: -WRONGTYPE Operation against a key holding the wrong kind of value\r\n
5. 数组以 * 号开头,后跟数组的长度
例:*3\r\n:l\r\n:2\r\n:3\r\n
两种特殊类型
1. NULL
NULL使用多行字符串表示,长度为-1
例:$-1\r\n
2. 空字符串
空串用多行字符串表示,长度填0
例:$0\r\n\r\n
空字符串有两个\r\n,因为两个\r\n之间的就是空串
客户端请求服务端
客户端向服务器发送的指令只有一种格式,就是多行字符串数组。
例如一个简单的set指令 set x x 会被序列化成下面的字符串
*3\r\n$3\r\nset\r\n$1\r\nx\r\n$1\r\nx\r\n
控制台展示如下
*3 $3 set $1 x $1 x
服务端响应客户端
服务端响应客户端信息时,将会使用多种数据结构,比客户端发送到服务端时复杂很多,不过即便很复杂,也是上面提到的5种基本类型的组合。
单行字符串响应
127 . 0 .0.1: 6379> set x x OK
上面的OK就是单行字符串响应(没有双引号),即 +OK
错误响应
127 . 0 . 0.1:6379> incr x (error} ERR value is not an integer or out of range
对一个字符串进行自增,服务器抛出错误提醒
-ERR value is not an integer or out of range
整数响应
127.0.0.1:6379> incr books (integer} 1
1就是整数响应 :1
多行字符串响应
127.0.0.1:6379> get x "x"
上面用括号引起来的x就是多行字符串响应,即:
$1 x
数组响应
127.0.0.1:6379> hset info name bibabo (integer) 1 127.0.0.1:6379> hset info age 18 (integer) 1 127.0.0.1:6379> hset info sex male (integer) 1 127.0.0.1:6379> hgetall info 1) "name" 2) "bibabo" 3) "age" 4) "18" 5) "sex" 6) "male"
上面的hgetall命令返回的就是一个数组,第0、2、4的字符串是hash表的key,1、3、6则是value,客户端负责将数组组装成字典返回。
*6 $4 name $6 bibabo $3 age $2 18 $3 sex $4 male
嵌套
127.0.0.1:6379> scan 0 1 )"0" 2) 1 ) "info" 2 )"books" 3 )"author"
scan命令用来扫描服务器包含的所有key列表,通过游标的形式一次获取一部分,该命令返回的是一个嵌套数组,
数组第一个值表示游标的值,如果这个值为0,说明已经遍历完毕,如果不为0,使用这个值作为下一次scan时的参数,
数组的第二个值又是一个数组,这个数组就是key的列表。
*2 $1 0 *3 $4 info $5 books $6 author
结
Redis作为文本协议中含有大量的回车换行符,这会占用网络流量,不过依然有很多项目使用RESP作为通讯协议,因为性能并不是评分的全部,简单性、易理解性、易实现性都需要进行权衡,
一般数据库的瓶颈很少在协议上,而是内部的逻辑处理,Redis使用一个单线程对外提供服务,在CPU跑满的情况下,可以达到10w/s的QPS。
更多编程相关知识,请访问:编程视频!!
以上がRedis-RESP の通信プロトコルについて説明する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redis指令を使用するには、次の手順が必要です。Redisクライアントを開きます。コマンド(動詞キー値)を入力します。必要なパラメーターを提供します(指示ごとに異なります)。 Enterを押してコマンドを実行します。 Redisは、操作の結果を示す応答を返します(通常はOKまたは-ERR)。

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

Redisソースコードを理解する最良の方法は、段階的に進むことです。Redisの基本に精通してください。開始点として特定のモジュールまたは機能を選択します。モジュールまたは機能のエントリポイントから始めて、行ごとにコードを表示します。関数コールチェーンを介してコードを表示します。 Redisが使用する基礎となるデータ構造に精通してください。 Redisが使用するアルゴリズムを特定します。

Redisを使用して操作をロックするには、setnxコマンドを介してロックを取得し、有効期限を設定するために有効期限コマンドを使用する必要があります。特定の手順は次のとおりです。(1)SETNXコマンドを使用して、キー価値ペアを設定しようとします。 (2)expireコマンドを使用して、ロックの有効期限を設定します。 (3)Delコマンドを使用して、ロックが不要になったときにロックを削除します。

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Redisは、メッセージミドルウェアとして、生産消費モデルをサポートし、メッセージを持続し、信頼できる配信を確保できます。メッセージミドルウェアとしてRedisを使用すると、低遅延、信頼性の高いスケーラブルなメッセージングが可能になります。
