Redis RESP

RESP (REdis Serialization Protocol) — простой текстовый протокол Redis. Проектирован для быстроты парсинга. Порт 6379. Версии RESP2 и RESP3.

Типы данных RESP2

ТипПрефиксПример
Simple String++OK\r\n
Error--ERR unknown\r\n
Integer::42\r\n
Bulk String$$5\r\nhello\r\n
Array**2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n
Null$-1\r\n или *-1\r\n

Команда как массив bulk strings

# SET foo bar
*3\r\n
$3\r\nSET\r\n
$3\r\nfoo\r\n
$3\r\nbar\r\n

# ответ
+OK\r\n

Inline commands

# для telnet-debug
SET foo bar\r\n
+OK\r\n

Pipelining

Клиент шлёт много команд подряд, не ждёт ответов. Сервер отвечает в порядке. Огромный boost throughput на локальной сети.

# без pipeline: 100 команд × RTT(1мс) = 100мс
# с pipeline:    все команды за 1 RTT + время сервера

RESP3 (Redis 6+)

Новые типы: Double (,), Boolean (#), Map (%), Set (~), Big Number ((), Verbatim String (=). Push-notification (>) для pubsub. Активируется через HELLO 3.

Pub/Sub

# subscriber
SUBSCRIBE news

# publisher (другое подключение)
PUBLISH news "hello"

# subscriber получает
*3
$7
message
$4
news
$5
hello

RESP + TLS

Redis 6+ поддерживает TLS. Клиент подключается сразу с TLS, RESP идёт поверх. Порт 6380.

Cluster mode

Redis Cluster — 16384 hash slots. Клиент получает MOVED/ASK-ответ если попал не на тот узел. RESP тот же, но клиенты должны понимать MOVED-редирект.

Реализации

См. также

← на главную