redis协议规范(Redis Protocol specification)
1.详见redis官网https://redis.io/topics/protocol
2.优势
相对于http等其他网络协议具有以下优势:
(1)实现简单(传输数据量小,意味着同等请求量,占用带宽少,扛并发数量多)
(2)快速地被计算机解析
(3)简单得可以能被人工解析
(4)网络层,Redis在TCP端口6379上监听到来的连接(本质就是socket),客户端连接到来时,Redis服务器为此创建一个TCP连接。
3.使用说明
在这个统一协议里,发送给Redis服务端的所有参数都是二进制安全的。以下是通用形式:
*后面数量表示存在几个$ $后面数量表示字符串的长度
在客户端与服务器端之间传输的每个Redis命令或者数据都以\r\n结尾。
*3
$3
SET
$8
testResp
$12
testValue123
本地安装redis实现简单测试,注意不要设置redis连接密码
public static void main(String[] s) { try { Socket socket = new Socket("127.0.0.1", 6379); StringBuilder sb = new StringBuilder(); sb.append("*3").append("\r\n"); sb.append("$").append("3").append("\r\n"); sb.append("set").append("\r\n"); sb.append("$").append("testResp".getBytes().length).append("\r\n"); sb.append("testResp").append("\r\n"); sb.append("$").append("testValue123".getBytes().length).append("\r\n"); sb.append("testValue123").append("\r\n"); System.out.println(sb.toString()); socket.getOutputStream().write(sb.toString().getBytes()); byte[] b = new byte[1024]; socket.getInputStream().read(b); System.out.println("写入成功.." + new String(b)); } catch (IOException e) { e.printStackTrace(); } }
我们常用的java工具类jedis封装原理,底层实现也是socket通信.