Nyx con Ejemplos

Hashes en nyx-kv

Los hashes almacenan pares campo-valor bajo una única clave, perfectos para perfiles de usuario o datos estructurados. HSET puede setear múltiples campos en un solo comando.

Código

// nyx-kv hashes -- HSET, HGET, HGETALL for structured data

fn resp_cmd(parts: Array) -> String {
    var sb: StringBuilder = StringBuilder.new()
    sb.append("*")
    sb.append(int_to_string(parts.length()))
    sb.append("\r\n")
    var i: int = 0
    while i < parts.length() {
        let p: String = parts[i]
        sb.append("$")
        sb.append(int_to_string(p.length()))
        sb.append("\r\n")
        sb.append(p)
        sb.append("\r\n")
        i = i + 1
    }
    return sb.to_string()
}

fn main() -> int {
    let fd: int = tcp_connect("127.0.0.1", 6380)
    if fd < 0 {
        print("connection failed")
        return 1
    }

    // Store a user profile as a hash
    tcp_write(fd, resp_cmd(["HSET", "user:1", "name", "Alice", "age", "30", "city", "Buenos Aires"]))
    let hset_reply: String = tcp_read_line(fd)
    print("HSET -> " + hset_reply.trim())

    // Get a single field
    tcp_write(fd, resp_cmd(["HGET", "user:1", "name"]))
    let hget_hdr: String = tcp_read_line(fd)
    let name: String = tcp_read_line(fd)
    print("HGET name -> " + name.trim())

    // Check if a field exists
    tcp_write(fd, resp_cmd(["HEXISTS", "user:1", "age"]))
    let exists: String = tcp_read_line(fd)
    print("HEXISTS age -> " + exists.trim())

    // Get the number of fields
    tcp_write(fd, resp_cmd(["HLEN", "user:1"]))
    let hlen: String = tcp_read_line(fd)
    print("HLEN -> " + hlen.trim())

    tcp_close(fd)
    return 0
}

Salida

HSET -> :3
HGET name -> Alice
HEXISTS age -> :1
HLEN -> :3

Explicación

Un hash es una clave que mapea a un Map interno de campo -> string. HSET user:1 name Alice age 30 city "Buenos Aires" escribe tres campos en un solo comando — más eficiente que tres llamadas SET separadas y mantiene el perfil agrupado bajo una única clave.

Usá hashes cuando de otro modo aplanarías una estructura anidada en claves como user:1:name, user:1:age. Un único hash es más fácil de borrar (DEL user:1 elimina todo), más fácil de enumerar (HGETALL, HKEYS, HVALS), y usa menos memoria del lado del servidor porque la clave de nivel superior se almacena una sola vez.

Patrones comunes: perfiles de usuario, feature flags por cuenta, paquetes de configuración, y carritos de compra donde cada campo es un id de producto y cada valor es la cantidad.

← Anterior Siguiente →

Source: examples/by-example/73-kv-hashes.nx