Redis源碼學習之【命令協議格式】

來源:互聯網
上載者:User
介紹

本來這篇要介紹Redis的命令解析的,但是要想對Redis的命令解析有更直觀的瞭解,必須先瞭解Redis的命令協議格式。

源碼

暫無(或者是是在network.c中吧)

分析Requests

*<number of arguments> CR LF
$<number of bytes of argument 1> CR LF
<argument data> CR LF
...
$<number of bytes of argument N> CR LF
<argument data> CR LF

Redis最新支援的二進位安全的請求通用格式如上所示。具體的執行個體有:

*3
$3
SET
$5
mykey
$7
myvalue

轉換為實際的每個位元組的形式字串為:"*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n"。同時這種格式的協議也用於Redis伺服器對用戶端的回複中,稱為Bulk reply。

這種統一請求協議在Redis也被用於向clients發送一些列的清單項目,被稱作為Multi Bulk Reply。它是由N的不同的Bulk Reply 加上一個 *<argc>\r\n 首碼,其中argc是Bulk Reply的個數。

Replies

Redis會向cient回複不同類型replies。根據第一位元組可以決定reply回複的不同的種類:

  • Status Reply,第一位元組為"+"
  • Error Reply,第一位元組為"-"
  • Integer Reply,第一位元組為":"
  • Bulk Reply,第一位元組為"$"
  • Multi Bulk Reply,第一位元組為"*"
  • Status Reply

+ <status strings> \r\n

  • Error Reply

- <error type> < error info> \r\n

  • Integer Reply

: <integer value strings> \r\n

  • Bulk Reply

$<number of bytes of the args>\r\n<args strings>\r\n

  • Multi Bulk Reply

*<number of bulk replies>\r\n<bulk reply list>\r\n

說明

在Multi-Bulk replies中如果單獨的元素的長度為-1則表明該元素丟失或者是Null。

Multiple commands and pipelining

一個用戶端可以使用同一個串連發送多個命令。利用管道技術可以使用一個單獨的寫操作將client的多個命令發送出去而不需要在發送完一個命令後等待伺服器的回複。這些請求的回複可以在最後進行統一讀取。

Inline Commands

Redis還支援早起的協議格式,就是在命令列中的形式如下:

C: PINGS: +PONG
C: EXISTS somekeyS: :0






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.