Протоколы и бинарная сериализация

парсер RESP RedisПроверяйте реальные байты

Вставьте RESP с экранированными символами или Hex-байты и изучите кадры без соединения с Redis.

парсер RESP Redis

Вход RESP

Результат

Введите RESP или выберите пример.

Локальный разбор: без подключения к Redis и загрузки данных.

Параметры

Введите RESP или выберите пример.

Ответ Redis в библиотеке уже преобразован в привычное значение, поэтому ошибка в $5 или *3 может остаться незаметной. Парсер RESP Redis показывает префиксы, байтовые диапазоны и вложенные типы исходного сообщения.

Зачем нужен парсер RESP Redis

Границы и типы исходного потока остаются проверяемыми.

Проверять части потокового значения

Парсер RESP Redis сверяет заявленную длину каждого фрагмента RESP3 с реальными байтами и ищет завершающий маркер. Неполный поток не выдаётся за готовое значение.

Несколько фрагментов байтов собираются в типизированное значение с видимыми границами

Сохранять типы в JSON

Бинарный bulk остаётся в Hex, map содержит упорядоченные пары, а атрибут прикрепляется к следующему значению. Обычный объект JSON потерял бы эти различия.

Бинарное значение, числовой ключ map и атрибут разнесены по полям JSON

Как найти ошибку в границах кадра

01

Выбрать представление входа

По умолчанию последовательности \r и \n преобразуются в байты CRLF. Для произвольных бинарных данных выберите Hex; одиночный LF не исправляется.

  • Длина считается в байтах UTF-8, а не в видимых символах.
02

Указать версию только если она известна

Авто принимает общие типы RESP2 и RESP3 и отмечает префиксы, требующие RESP3. Режим RESP2 отклоняет их, но не угадывает согласованную версию.

  • Авторазбор запускается через 350 мс; вручную доступно Ctrl/Cmd + Enter.
03

Сверить диапазоны перед экспортом

В дереве видны байтовый диапазон и объявленная длина. Верхний массив строк получает сводку о форме команды без проверки её допустимости на сервере.

  • После изменения входа или режима копирование и загрузка ждут нового разбора.

Структура протокола по байтам

Дерево типов RESP2 и RESP3

Разбор RESP отличает null bulk от пустого bulk, массив от map и ошибочный ответ сервера от ошибки формата входа.

Строгая проверка длины

Заявленное число сверяется с реальными байтами UTF-8 и завершающим CRLF. Первый сбой получает смещение и строку ввода.

Последовательные кадры

Сообщения pipeline показаны по порядку. Массив, похожий на команду, получает имя и число аргументов без обещания, что Redis примет его.

Типизированный JSON

Декодирование Redis сохраняет Hex для бинарных данных, десятичный текст для больших чисел, пары map и атрибуты RESP3.

Чего не узнать из захваченного потока

Нет подключения к Redis
Читаются только вставленные байты. Инструмент не отправляет SET, не проверяет ключи и не моделирует состояние базы.
Нельзя узнать согласованную версию
Общие типы RESP2 и RESP3 кодируются одинаково. Авто указывает минимальную нужную версию, а не результат HELLO.
Бинарные данные не подменяются текстом
Если bulk не является корректным UTF-8, остаётся Hex. Ключи map не превращаются принудительно в свойства обычного объекта JSON.
Только полные данные в пределах лимита
Парсер RESP Redis требует точных CRLF и байтовых длин. Допускается до 1 МиБ, 1000 кадров, 10000 узлов и 64 уровней; незаконченный поток вызывает ошибку.

Вопросы про парсер RESP Redis

Как разобрать протокол Redis по сохранённым байтам?

Вставьте экранированный RESP или Hex. Дерево покажет тип каждого префикса, диапазон байтов и вложенные значения без подключения к серверу.

Как устроен формат RESP для bulk-строки?

После $ идут длина в байтах, CRLF, указанное число байтов данных и ещё CRLF. Один символ UTF-8 может занимать несколько байтов.

Можно ли отличить RESP2 от RESP3 по одному ответу?

Типы map, boolean, attribute и push требуют RESP3. Если ответ состоит только из общих типов, фактическая версия соединения неизвестна.

Можно ли посмотреть RESP-представление команды?

Если верхний уровень — массив строк, показываются имя и аргументы. Это проверка формы кадра; инструмент не выполняет команду и не знает состояние Redis.

Почему $-1 не то же самое, что $0?

$-1 означает null bulk, а $0 с двумя CRLF — пустую bulk-строку. Дерево и типизированный JSON сохраняют разницу.

Остался вопрос?

Проверьте кадр через парсер RESP Redis

Найдите первое неверное смещение до изменения клиента. Парсер RESP Redis открывает экспорт только после полного успешного разбора.

Обработка выполняется локально в браузере.