REDIS (15)手寫Java Redis客戶端(1)RESP協議分析(未完)
阿新 • • 發佈:2018-12-12
一直對Jedis有點興趣, 現在靜下心來抽空看看redis客戶端和消費端是怎麼連線的
1. 對Jedis的get命令抓包
傳送
接收
可見是明文協議,0d 0a 是 \r\n
我們找下文件
redis 序列化協議
2. 模仿協議內容傳送並接收內容
2.1 傳統BIO的寫法
public static void main(String[] args) throws Exception { Socket socket = new Socket("123.56.13.70", 6300); OutputStream out = socket.getOutputStream(); InputStream in = socket.getInputStream(); StringBuilder sb = new StringBuilder(); sb.append("*3").append("\r\n"); sb.append("$3").append("\r\n"); sb.append("SET").append("\r\n"); sb.append("$3").append("\r\n"); sb.append("mua").append("\r\n"); sb.append("$4").append("\r\n"); sb.append("lisa").append("\r\n"); out.write(sb.toString().getBytes()); byte[] bytes = new byte[1024]; in.read(bytes); System.out.println(sb.toString()); System.out.println("-----------------"); System.out.println(new String(bytes)); socket.close(); }
結果:
*3
$3
SET
$3
mua
$4
lisa
-----------------
+OK