02.課件擴(kuò)展redis協(xié)議_第1頁(yè)
02.課件擴(kuò)展redis協(xié)議_第2頁(yè)
02.課件擴(kuò)展redis協(xié)議_第3頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、網(wǎng)絡(luò)層客戶端通過創(chuàng)建到 6379 端口的 TCP 連接來連接到一個(gè) Redis 服務(wù)器。每個(gè) Redis 命令或者客戶端和服務(wù)器之間傳輸?shù)臄?shù)據(jù)都以rn (CRLF)結(jié)束。請(qǐng)求Redis 可以接受由不同參數(shù)組成 令。只要接收到一個(gè)命令,這個(gè)命令就會(huì)被執(zhí)行,然后一個(gè)答復(fù)會(huì)被返回給客戶端。新的請(qǐng)求協(xié)議新的 協(xié)議是在Redis1.2 中引入的,但是在Redis2.0 中成為了與 Redis 服務(wù)器交互的標(biāo)準(zhǔn)方式。在 協(xié)議中所有發(fā)送到Redis 服務(wù)器的參數(shù)都是二進(jìn)制安全的。這是總體格式:* CR LF$ CR LF CR LF容易實(shí)現(xiàn)機(jī)器要快容易理解由JeremyWei 同學(xué)進(jìn)行翻譯并給大家。原譯文:

2、Redis 協(xié)議是從以下幾個(gè)方面做的一個(gè)折中方案:本文內(nèi)容來源于 Redis 的文檔,對(duì) Redis 自己的應(yīng)用層協(xié)議進(jìn)行了詳細(xì)深入的講解,如果是單行回復(fù),那么第一個(gè)字節(jié)是+如果是 multi-bulk 回復(fù),那么第一個(gè)字節(jié)是*如果是 bulk 回復(fù),那么第一個(gè)字節(jié)是$如果回復(fù)的內(nèi)容是一個(gè)整型數(shù)字,那么第一個(gè)字節(jié)是:如果回復(fù)的內(nèi)容是錯(cuò)誤信息,那么第一個(gè)字節(jié)是 _ .$ CR LF CR LF看下這個(gè)例子:*3$3SET$5 mykey$7 myvalue這是以上命令以帶引號(hào)的字符串展現(xiàn)的樣子,這樣就可以看到這個(gè)請(qǐng)求中每個(gè)字節(jié)的準(zhǔn)確內(nèi)容:*3rn$3rnSETrn$5rnmykeyrn$7rnm

3、yvaluern就像你一會(huì)將會(huì)看到的,這個(gè)格式還會(huì)被用在Redis 回復(fù)中。這個(gè)被用于每個(gè)參數(shù)中的格式$6rnmydatarn 叫做Bulk 回復(fù)。Redis 實(shí)際上使用的請(qǐng)求協(xié)議會(huì)返回內(nèi)容列表,叫做 Multi-bulk 回復(fù)。它是由 N 個(gè)不同的Bulk 回復(fù)合在一起,并且有一個(gè)字符串前綴*rn 其中是后面參數(shù)(Bulk 回復(fù))的數(shù)量。4.回復(fù)Redis 會(huì)以不同類型的回復(fù)對(duì)命令進(jìn)行響應(yīng)。可以通過服務(wù)器發(fā)送的第一個(gè)字節(jié)來判定回復(fù)的類型:狀態(tài)回復(fù)一個(gè)狀態(tài)回復(fù)(或者:?jiǎn)涡谢貜?fù))的格式是以 開頭,以BXBT結(jié)束的單行字符串。舉個(gè)例子:+OK客戶端庫(kù)要返回 后面的所有內(nèi)容,這個(gè)例子里邊是字符串51

4、。錯(cuò)誤回復(fù)錯(cuò)誤的發(fā)送方式和狀態(tài)回復(fù)很像。唯一的不同是第一個(gè)字節(jié)用 替代了 。 錯(cuò)誤回復(fù)只有當(dāng)一些奇怪的事情發(fā)生時(shí)才會(huì)被發(fā)送,例如如果你想要用錯(cuò)誤的數(shù)據(jù)類型執(zhí)行一個(gè)操作,或者這個(gè)命令不存在等等。所以客戶端庫(kù)應(yīng)該在接收到一個(gè)錯(cuò)誤回復(fù)的時(shí)候拋出一個(gè)異常。整形回復(fù)這個(gè)類型的回復(fù)就是一整數(shù)以 )82, 結(jié)束的字符串,并且用一個(gè)字節(jié)的字符 作為前綴。例如 BXBT,或者 BXBT 都是整形回復(fù)。 像 /4)8 或者 29:9+命令使用整型回復(fù)來返回一個(gè)沒有特別含義的整型數(shù)字。對(duì)于 /4)8 來說返回的是增加后的數(shù)字,對(duì)于 29:9 時(shí)間等等。 像 +/9:9 這樣令會(huì)返回 表示 ZXK,返回 表示 LGR

5、YK。 其令像 9*,98+3 和 9+:4 在操作實(shí)際完成的時(shí)候會(huì)返回 ,否則返回 。以下命令將會(huì)返回整型回復(fù):9+:4 *+2 +/9:9 /4)8 /4)8(? *+)8 *+)8(? *(9/+ 29:9 35+ 22+4 9* 98+3 9/93+3(+8 9)8*(RQ 回復(fù)(RQ 回復(fù)被服務(wù)器用來返回一個(gè)二進(jìn)制安全的字符串。C: GET mykeyS: $6rnfoobarrn服務(wù)器以這種方式來發(fā)送數(shù)據(jù):第一行是一個(gè)字節(jié)的內(nèi)容 ,之后跟著具體內(nèi)容的字節(jié)數(shù),接下來是 )82,,然后具體數(shù)據(jù)內(nèi)容被發(fā)送,接下來是額外的兩個(gè)字節(jié)的 )82,。服務(wù)器實(shí)際發(fā)送的序列是:$6rnfoobarr

6、n如果請(qǐng)求的內(nèi)容不存在,那么 HRQ 回復(fù)將會(huì)使用特殊值 作為數(shù)據(jù)長(zhǎng)度,例如:C: GET nonexistingkeyS: $-1當(dāng)請(qǐng)求對(duì)象不存在,客戶端庫(kù)6/ 不要返回一個(gè)空字符串,應(yīng)該是一個(gè) TOR 對(duì)象。舉個(gè)例子一個(gè) 8H_ 庫(kù)應(yīng)該返回TOR,一個(gè) ) 庫(kù)應(yīng)該返回 4;22(或者在回復(fù)對(duì)象中設(shè)置一個(gè)特殊標(biāo)記),等等。3RZO HRQ 回復(fù)像 284-+ 這類令需要返回多個(gè)值(列表中的每個(gè)元素是一個(gè)值,284-+ 需要返回多個(gè)元素)。這通過 SRZOVRQ XOZK 來實(shí)現(xiàn),其第一行指明后面有多少個(gè) HRQXOZK。一個(gè) SRZO HRQ 回復(fù)的第一個(gè)字節(jié)一直是 。例如:C:s:s:s:

7、s:s:s:s:s:s:LRANGE mylist 0 3*4$3 foo$3 bar$5o$5World就像你看到的,multi bulk 回復(fù)和使用協(xié)議發(fā)送命令到 Redis 服務(wù)器使用的是同樣的格式。 服務(wù)器發(fā)送的第一行是*4rn,用來下面將會(huì)有四個(gè) bulk 回復(fù)。然后每個(gè) bulkwrite 將會(huì)被傳送。 如果指定的 key 不存在,那么這個(gè) key 被認(rèn)為擁有一個(gè)空列表,然后0 會(huì)做為 multi bulk 的數(shù)量被發(fā)送。例如:C: LRANGE nokey 0 1S: *0當(dāng) BLPOP 命令超時(shí),它將返回值為 nil 的 multi bulk 回復(fù)。這個(gè)類型的 multi bu

8、lk 的數(shù)量為-1 并且應(yīng)該被解釋為 nil 值。例如:C: BLPOP key 1S: *-1當(dāng)這個(gè)發(fā)生的時(shí)候,一個(gè)客戶端庫(kù)API 應(yīng)該返回一個(gè) nil 對(duì)象而不是一個(gè)空列表。區(qū)分一個(gè)空的列表和一個(gè)錯(cuò)誤條件(比如 BLPOP 命令的超時(shí)條件)是必要的。10. Multi-Bulk 回復(fù)中的Nil 元素一個(gè) multi bulk回復(fù)的單個(gè)元素可能會(huì)存在-1 的長(zhǎng)度,用來指明這個(gè)元素不存在并且不是空字符串。這個(gè)可能發(fā)生在啟用了 GET 模式選項(xiàng)的SORT 命令,并且指定的 key 不存在。包含一個(gè)空元素的 multi bulk 回復(fù)的例子:S:S:S:S:S:S:*3$3 foo$-1$3 ba

9、r第二個(gè)元素是 nil。客戶端庫(kù)需要返回如下內(nèi)容:foo,nil,bar11. 多個(gè)命令和管道 /TROTK 命令向 8KJOY 發(fā)送命令最簡(jiǎn)單的方法是使用 OTROTK 命令。以下是一個(gè)服務(wù)器 客戶端之間使用OTROTK 命令進(jìn)行交互的例子(服務(wù)器以 9 作為開始,客戶端以 ) 作為開始)C:S: +PONG以下是另一個(gè)例子,一個(gè)返回整數(shù)的OTROTK 命令:C: EXISTS somekey S: :0可能的。(RQ 命令 HRQ 命令和 OTROTK 命令幾乎是一樣的,但是最后一個(gè)參數(shù)為了能夠接受二進(jìn)制安全的內(nèi)容,所以需要以特殊的方式進(jìn)行處理。OTROTK 命令 命令很簡(jiǎn)單,就是用空格把

10、參數(shù)分隔開來的字符串。二進(jìn)制安全是不一個(gè)客戶端可以使用相同的連接來發(fā)送多個(gè)命令。8KJOY 是支持管道的,所以客戶端可以通過一次寫操作發(fā)送多個(gè)命令,不需要服務(wù)器的回復(fù)才能發(fā) 送下一個(gè)命令。所有的回復(fù)可以在最后。 通常情況下 8KJOY 服務(wù)器和客戶端之間會(huì)有非常快的連接,所以客戶端支持這個(gè)特性不是那么重要,但如果一個(gè)應(yīng)用需要在很短的時(shí)間里發(fā)送大量令那么使用管道將會(huì)非常快。 發(fā)送命令的舊協(xié)議在請(qǐng)求協(xié)議之前,8KJOY 使用一個(gè)不同的協(xié)議來發(fā)送命令,這個(gè)協(xié)議仍然被支持因?yàn)橥ㄟ^TKZ 它很容易手寫。在這個(gè)協(xié)議中存在兩種命令:Redis 的詳細(xì)介紹:請(qǐng)點(diǎn)這里Redis 的地址:請(qǐng)點(diǎn)這里由于someke

11、y不存在,所以服務(wù)器返回:0。 注意 EXISTS 命令只帶有一個(gè)參數(shù)。多個(gè)參數(shù)以空格進(jìn)行分隔。Bulk 命令當(dāng)一些命令以 inline 命令發(fā)送的時(shí)候?yàn)榱耸棺詈笠粋€(gè)參數(shù)支持二進(jìn)制安全,需要以一個(gè)特殊的格式發(fā)送。這些命令將會(huì)把最后一個(gè)參數(shù)作為字節(jié)計(jì)數(shù)器,然后大量的數(shù)據(jù)會(huì)被發(fā)送(這些數(shù)據(jù)可以為二進(jìn)制安全,因?yàn)榉?wù)器知道有多少字節(jié)需要 )。 看下面這個(gè)例子:C: SET mykey 6 C: foobarS: +OK這個(gè)命令的最后一個(gè)參數(shù)是6。這個(gè)指明了后面數(shù)據(jù),字符串foobar的字節(jié)數(shù)。注意即使這些數(shù)據(jù)被額外的二個(gè)字節(jié)大小的 CRLF 所截?cái)唷?所有 bulk 命令的準(zhǔn)確格式是:把最后一個(gè)參數(shù)替換成后面數(shù)據(jù)的字節(jié)數(shù),接下來是數(shù)據(jù)本身和 CRLF。為了能夠讓程序員更加清晰的理解,這是上面例子中客

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論