redis RESP协议

RESP协议

什么是RESP?

RESP 是redis客户端和服务端之前使用的一种通讯协议;
RESP底层采用的是TCP的连接方式,通过tcp进行数据传输,然后根据解析规则解析相应信息;
RESP 的特点: 实现简单、快速解析、可读性好。

RESP协议说明

RESP支持以下数据类型的序列化:简单字符串,错误类型,整数,批量字符串和数组。
RESP的信息规则:

  1. 简单字符串:回复的第一个字节是 “+”
  2. 错误类型:回复的第一个字节是 “-“
  3. 整形数字:回复的第一个字节是 “:”
  4. 批量字符串:回复的第一个字节是 “$”
  5. 数组:回复的第一个字节是 “*”
  6. 每行信息已\r\n结尾

RESP验证

**分析:**redis-cli作为官方提供的Redis客户端,必然遵循了RESP协议;而我们使用redis-cli操作redis-server,可以推断肯定是redis-cli基于RESP和redis-server的6379端口进行了通信。

  1. 建立一个demo程序(SocketListener),监听本地的6379端口,接收到数据就打印;
  2. 使用redis-cli客户端执行set key value,看看向6379端口发送了什么。
    ps:SocketListener先运行,再在redis-cli窗口执行命令。
public class SocketListener {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(6379);
        Socket socket = serverSocket.accept();
        byte[] bytes = new byte[1024];
        socket.getInputStream().read(bytes);
        System.out.println(new String(bytes));
    }
}

给出拦截到的TCP数据:
SET key value #对应的resp通信协议串

*3
$3
SET
$3
key
$5
value

拦截到的数据的含义:

*3		//表示返回了一个数组,长度为3
$3		//表示这是一个多行字符串,实际信息字符串长度为3
SET		//为上面$3描述的实际字符串
$3		//表示这是一个多行字符串,实际信息字符串长度为3
key		//为上面$3描述的实际字符串
$5		//表示这是一个多行字符串,实际信息字符串长度为5
value	//为上面$5描述的实际字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值