欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis協(xié)議具體用法詳解

 更新時間:2019年06月23日 11:44:52   投稿:laozhang  
在本篇文章中小編給大家整理了關(guān)于Redis協(xié)議具體用法以及相關(guān)內(nèi)容知識點,需要的朋友們學(xué)習(xí)下。

前言

我們用過很多redis的客戶端,有沒有相過自己擼一個redis客戶端?其實很簡單,基于socket,監(jiān)聽6379端口,解析數(shù)據(jù)就可以了。

redis協(xié)議

解析數(shù)據(jù)的過程主要依賴于redis的協(xié)議了。我們寫個簡單例子看下redis的協(xié)議:

public class RedisTest {  public static void main(String[] args) {    Jedis jedis = new Jedis("127.0.0.1", 6379);    jedis.set("eat", "I want to eat");  }}

監(jiān)聽socket:

  public static void main(String[] args) throws IOException {    ServerSocket server = new ServerSocket(6379);    Socket socket = server.accept();    byte[] chars = new byte[64];    socket.getInputStream().read(chars);    System.out.println(new String(chars));  }

看下數(shù)據(jù):

*3$3SET$3eat$13I want to eat

參照官方協(xié)議文檔https://redis.io/topics/protocol,解析下數(shù)據(jù)。

(1)簡單字符串 Simple Strings, 以 "+"加號 開頭(2)錯誤 Errors, 以"-"減號 開頭(3)整數(shù)型 Integer, 以 ":" 冒號開頭(4)大字符串類型 Bulk Strings, 以 "$"美元符號開頭,長度限制512M(5)組類型 Arrays,以 "*"星號開頭并且,協(xié)議的每部分都是以 "\r\n" (CRLF) 結(jié)尾的。

所以上面的數(shù)據(jù)的含義是:

*3  數(shù)組包含3個元素,分別是SET、eat、I want to eat$3  是一個字符串,且字符串長度為3SET 字符串的內(nèi)容$3  是一個字符串,且字符串長度為3eat 字符串的內(nèi)容$13 是一個字符串,且字符串長度為13I want to eat 字符串的內(nèi)容

執(zhí)行g(shù)et 'eat'的數(shù)據(jù)如下:

*2$3GET$3eat

擼一個客戶端

掌握了redis協(xié)議,socket之后,我們就可以嘗試擼一個客戶端了。

socket:

public RedisClient(String host, int port){    try {      this.socket = new Socket(host,port);      this.outputStream = this.socket.getOutputStream();      this.inputStream = this.socket.getInputStream();    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }

set協(xié)議:

  public String set(final String key, String value) {    StringBuilder sb = new StringBuilder();    //雖然輸出的時候,會被轉(zhuǎn)義,然而我們傳送的時候還是要帶上\r\n    sb.append("*3").append("\r\n");    sb.append("$3").append("\r\n");    sb.append("SET").append("\r\n");    sb.append("$").append(key.length()).append("\r\n");    sb.append(key).append("\r\n");    sb.append("$").append(value.length()).append("\r\n");    sb.append(value).append("\r\n");    byte[] bytes= new byte[1024];    try {      outputStream.write(sb.toString().getBytes());      inputStream.read(bytes);    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    return new String(bytes);  }

測試:

    RedisClient redisClient = new RedisClient("127.0.0.1", 6379);    String result = redisClient.set("eat", "please eat");    System.out.println(result);

執(zhí)行結(jié)果:

+OK

更多Redis相關(guān)技術(shù)文章,請訪問Redis教程欄目進(jìn)行學(xué)習(xí)!

相關(guān)文章

  • redis中事務(wù)機(jī)制及樂觀鎖的實現(xiàn)

    redis中事務(wù)機(jī)制及樂觀鎖的實現(xiàn)

    這篇文章主要介紹了redis中事務(wù)機(jī)制及樂觀鎖的相關(guān)內(nèi)容,通過事務(wù)的執(zhí)行分析Redis樂觀鎖,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • 安裝redis(windows和Ubuntu)詳解

    安裝redis(windows和Ubuntu)詳解

    這篇文章主要介紹了Redis在Ubuntu和Windows下的安裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 淺談我是如何用redis做實時訂閱推送的

    淺談我是如何用redis做實時訂閱推送的

    這篇文章主要介紹了淺談我是如何用redis做實時訂閱推送的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Redis增減庫存避坑的實現(xiàn)

    Redis增減庫存避坑的實現(xiàn)

    在電商平臺或者倉庫管理系統(tǒng)中,庫存的管理是非常重要的一項任務(wù),本文主要介紹了Redis增減庫存避坑的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 聊聊redis-dump工具安裝問題

    聊聊redis-dump工具安裝問題

    這篇文章主要介紹了redis-dump工具安裝問題,由于安裝redis-dump工具需要使用rvm?和gem工具所以要提前安裝,詳細(xì)的安裝過程本文給大家提到過,需要的朋友可以參考下
    2022-01-01
  • Redis偶發(fā)連接失敗案例實戰(zhàn)記錄

    Redis偶發(fā)連接失敗案例實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于Redis偶發(fā)連接失敗的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使Redis具有一定的參考學(xué)習(xí)價值,用需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Redis不使用 keys 命令獲取鍵值信息的方法

    Redis不使用 keys 命令獲取鍵值信息的方法

    這篇文章主要介紹了Redis 不使用 keys 命令獲取鍵值信息的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-08-08
  • redis?zset實現(xiàn)滑動窗口限流的代碼

    redis?zset實現(xiàn)滑動窗口限流的代碼

    這篇文章主要介紹了redis?zset實現(xiàn)滑動窗口限流,滑動窗口算法思想就是記錄一個滑動的時間窗口內(nèi)的操作次數(shù),操作次數(shù)超過閾值則進(jìn)行限流,本文通過實例代碼給大家詳細(xì)介紹,需要的朋友參考下吧
    2022-03-03
  • 在ssm項目中使用redis緩存查詢數(shù)據(jù)的方法

    在ssm項目中使用redis緩存查詢數(shù)據(jù)的方法

    本文主要簡單的使用Java代碼進(jìn)行redis緩存,即在查詢的時候先在service層從redis緩存中獲取數(shù)據(jù)。如果大家對在ssm項目中使用redis緩存查詢數(shù)據(jù)的相關(guān)知識感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-03-03
  • Redis基礎(chǔ)學(xué)習(xí)之管道機(jī)制詳析

    Redis基礎(chǔ)學(xué)習(xí)之管道機(jī)制詳析

    這篇文章主要給大家介紹了關(guān)于Redis基礎(chǔ)學(xué)習(xí)之管道機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評論