Protocolo RESP
RESP (REdis Serialization Protocol) es el formato de wire basado en texto que usan Redis y nyx-kv. Cada tipo de dato tiene un prefijo de un solo carácter: + simple string, - error, : integer, $ bulk string, * array. Todas las líneas terminan con \r\n. Esta receta muestra cómo construir mensajes RESP manualmente.
Código
// RESP protocol — Redis serialization format
fn main() -> int {
// Simple string: +OK\r\n
let simple: String = "+OK\r\n"
print("simple string: " + simple.trim())
// Error: -ERR unknown command\r\n
let error: String = "-ERR unknown command\r\n"
print("error: " + error.trim())
// Integer: :42\r\n
let integer: String = ":" + int_to_string(42) + "\r\n"
print("integer: " + integer.trim())
// Bulk string: $5\r\nhello\r\n
let data: String = "hello"
let bulk: String = "$" + int_to_string(data.length()) + "\r\n" + data + "\r\n"
print("bulk string: " + bulk.trim())
// Array: *3\r\n$3\r\nSET\r\n$4\r\nname\r\n$3\r\nNyx\r\n
let cmd: String = "*3\r\n$3\r\nSET\r\n$4\r\nname\r\n$3\r\nNyx\r\n"
print("SET command: " + cmd.replace("\r\n", " ").trim())
return 0
}
Salida
simple string: +OK error: -ERR unknown command integer: :42 bulk string: $5 hello SET command: *3 $3 SET $4 name $3 Nyx
Explicación
RESP es deliberadamente simple: cada mensaje es texto legible por humanos terminado con \r\n. Los bulk strings incluyen un prefijo de longitud ($5\r\nhello\r\n), lo que permite valores binary-safe. Los arrays usan *N para indicar la cantidad de elementos que siguen.
Los comandos de Redis se envían como arrays RESP de bulk strings. Por ejemplo, SET name Nyx se convierte en *3\r\n$3\r\nSET\r\n$4\r\nname\r\n$3\r\nNyx\r\n. Este es el mismo formato que habla nyx-kv en el puerto 6380, compatible con redis-cli.