了解redis客戶端,手寫乙個簡單的Jedis

2021-09-24 16:31:47 字數 1604 閱讀 4417

redis通訊協議使用的是resp協議,協議具有容易實現、解析快、人類可讀等特點,協議的每部分都是以\r\n結尾。

redis客戶端與伺服器端通訊也是通過socket網路程式設計,我們先來模擬乙個redis伺服器端攔截請求,使用socketserver開啟乙個6379埠,接收列印資訊

public

class

catch

(ioexception e)}}

然後使用jedis向6379埠set乙個值,

@test

public

void

testjedis()

先把main方法啟動,然後執行我們的測試方法。

會發現測試方法失敗了,

沒關係,點開我們的main方法,會發現它列印了一堆資訊,攔截到了jedis.set方法的資訊。

這些東西是什麼意思呢。檢視jedis的set方法,我們一層層的看下去會定位到下面的方法。

private static void sendcommand(final redisoutputstream os, final byte command,

final byte... args)

} catch (ioexception e)

}

轉為上面的**os.write裡面的是

$3//命令的長度。我們命令是set

set//我們的命令

//然後迴圈我們的args陣列

$5//$+fruit的長度

fruit

$5

這下就看到明白了吧,jedis的set方法就是往6379埠寫入了上面的特性的資訊。

現在我們來自己寫個set方法。

@component

public

class

redisclient

public string set

(string key, string value)

throws ioexception

}

開啟本地redis客戶端

新開乙個終端,執行redis-cli

我先把自己本地快取清掉。flushdb

寫乙個測試類,來試試我們自己寫的set方法能不能把資料存入redis。

public

class

redistest

catch

(ioexception e)

}}

實現乙個簡單redis的客戶端

首先我們需要知道去連線到redis肯定是需要使用到socket 那麼可以建立乙個類專門實現與redis的乙個通訊。其次redis中是有屬於自己的協議的,使用aof進行持久化的時候,是否有看過相應的日誌檔案,用來存放命令,這邊順便說下如何開啟,並檢視該檔案。代表乙個命令的開始操作,3代表該操作後面總共...

1 2 4寫乙個 echo 客戶端

客戶端要做的是 跟寫伺服器一樣,我們提供 channelinboundhandler 來處理資料。下面例子,我們用 channelinboundhandler 來處理所有的任務,需要覆蓋三個方法 listing 2.4 channelhandler for the client sharable 1...

乙個基本的SOCKET客戶端程式

標頭檔案 include include 定義常量 define recv buffer size 8192 主函式 int main int argc,char argv 建立套接字 connectsocket socket af inet,tcp ip協議 sock stream,tcp傳輸 i...