协议 / 二进制序列化

Redis RESP 协议解析看清原始字节与类型

粘贴带转义的 RESP 文本或 Hex 字节,检查完整帧,无需连接 Redis。

Redis RESP 协议解析

RESP 输入

解析结果

输入 RESP 数据或载入示例。

仅在本地解析;不连接 Redis,也不上传。

选项

输入 RESP 数据或载入示例。

抓到的 Redis 日志里有 $5、*3,却看不出哪个长度写错时,先看线上的字节比猜客户端行为可靠。Redis RESP 协议解析会把每个前缀、字节范围和嵌套值排成树,帮助定位协议错误。

为什么使用 Redis RESP 协议解析

让完整的静态协议数据保留字节边界和原有类型。

逐块检查流式数据

Redis RESP 协议解析会先核对每个 RESP3 分块声明的字节数与终止符,再合并成一个值。树中仍标出分块数量;缺少结束块时不会误报成功。

多个数据块汇成一个类型节点,分块边界仍然可见

带类型导出,避免误读

二进制 bulk 保留 Hex,map 保留有序的键值条目,属性单独附在后继值上。普通 JSON 对象无法表达这些差异,带类型的 JSON 会明确写出它们。

二进制值、非字符串 map 键和属性分别进入 JSON 字段

按字节核对协议帧的三个关键点

01

选对输入表示

默认把字面量反斜杠 r、反斜杠 n 转成 CRLF。遇到非文本 bulk 时切换 Hex;裸 LF 不会被自动修补。

  • 长度按 UTF-8 字节算,不按汉字个数算。
02

明确版本校验范围

自动模式接受 RESP2 与 RESP3 共有类型,并标明出现的 RESP3 专有类型。指定 RESP2 后,这些前缀会报错;共有类型无法反推连接版本。

  • 自动解析等待 350 毫秒;关闭后可按 Ctrl/Cmd + Enter。
03

检查结果再导出

类型树列出每个节点的字节范围和声明长度。顶层字符串数组会显示命令形状,但不判断命令是否合法;JSON 视图保留原始类型。

  • 修改输入或选项会立即禁用旧结果的复制和下载。

从前缀读到完整帧

RESP2 与 RESP3 类型树

Redis 协议解析将空 bulk、null bulk、数组、map、推送消息及服务器错误值分别展示,不把协议错误回复当成解析失败。

严格长度与换行校验

RESP 数据格式中的 bulk 长度是字节数。实际字节、尾部 CRLF 或聚合元素数不符时,报告首个出错偏移和输入行列。

多帧与命令形状

连续帧按顺序保留。顶层数组若由字符串组成,可显示命令名和参数预览,但不会向 Redis 发送数据。

保真的 JSON 映射

Redis 序列化协议允许非字符串 map 键与二进制内容;导出采用类型标签和有序条目,不强转为普通 JSON 对象。

这些边界不能靠解析结果猜测

不连接服务器
这里只读粘贴的 wire 数据,不查询键、不执行 SET,也不模拟键空间;命令名只是字节结构提示。
不能反推协商版本
RESP3 协议增加新类型,但共有类型在 RESP2 和 RESP3 中编码相同。自动模式只指出解码所需的最低版本。
不把二进制当文本
无效 UTF-8 的 bulk 保留 Hex,不插入替代字符;map 键也不会被压成普通对象属性。
必须是完整且有界的帧
Redis RESP 协议解析要求精确 CRLF 和字节长度,最多读取 1 MiB、1000 帧、10000 节点和 64 层。缺失的流式分块会报错。

Redis RESP 协议解析常见问题

怎样解析 Redis 协议中的命令帧?

粘贴转义后的 RESP 文本或 Hex 字节。顶层字符串数组会显示命令名与参数数目;工具只核对帧结构,不判断服务端是否接受命令。

Redis RESP 协议里的长度为什么和字符数不一样?

bulk 的 $ 后面写的是字节数。一个汉字的 UTF-8 编码通常占 3 个字节,因此不能按屏幕上看到的字符数填写。

RESP2 与 RESP3 怎样区分?

map、布尔值、推送等专有前缀要求 RESP3;仅出现共有类型时无法知道真实连接是否协商了 RESP3。

Redis 通信协议能用这个页面直接连接服务器吗?

不能。页面没有地址、端口或密码输入,不发送网络请求;它只检查已经取得的 RESP 字节。

RESP 中 $-1 和 $0 有什么区别?

$-1 是 null bulk;$0 后接两个 CRLF 表示空 bulk。类型树和导出的 JSON 会保留这两个不同类型。

还有协议问题?

用 Redis RESP 协议解析核对抓到的帧

先看第一个错误字节再修改客户端。Redis RESP 协议解析只有在完整读取成功后才允许导出带类型的结果。

所有处理均在浏览器本地完成。