1. 程式人生 > >REDIS (15)手寫Java Redis客戶端(1)RESP協議分析(未完)

REDIS (15)手寫Java Redis客戶端(1)RESP協議分析(未完)

一直對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