Nyx con Ejemplos

nyx-kv TTL y EXPIRE

EXPIRE establece un TTL sobre una clave — luego de que transcurren los segundos indicados, la clave se elimina automáticamente. Es esencial para almacenamiento de sesiones, caché y limitación de tasa (rate limiting).

Código

// nyx-kv TTL -- key expiration for caching and session storage

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 session token that expires in 60 seconds
    tcp_write(fd, resp_cmd(["SET", "session:abc123", "user42"]))
    let set_reply: String = tcp_read_line(fd)
    print("SET -> " + set_reply.trim())

    // Set expiration (in seconds)
    tcp_write(fd, resp_cmd(["EXPIRE", "session:abc123", "60"]))
    let expire_reply: String = tcp_read_line(fd)
    print("EXPIRE 60s -> " + expire_reply.trim())

    // Check remaining TTL
    tcp_write(fd, resp_cmd(["TTL", "session:abc123"]))
    let ttl: String = tcp_read_line(fd)
    print("TTL -> " + ttl.trim() + " seconds")

    // Alternative: SET with EX in one command
    tcp_write(fd, resp_cmd(["SET", "cache:user:42", "payload", "EX", "300"]))
    let setex: String = tcp_read_line(fd)
    print("SET with EX 300 -> " + setex.trim())

    // Remove expiration (make key permanent)
    tcp_write(fd, resp_cmd(["PERSIST", "session:abc123"]))
    let persist: String = tcp_read_line(fd)
    print("PERSIST -> " + persist.trim())

    tcp_close(fd)
    return 0
}

Salida

SET -> +OK
EXPIRE 60s -> :1
TTL -> :60 seconds
SET with EX 300 -> +OK
PERSIST -> :1

Explicación

Toda clave puede tener un TTL — un plazo de reloj monotónico luego del cual el servidor la elimina de forma perezosa (lazy). EXPIRE key seconds asocia un TTL a una clave existente y devuelve :1 si la clave existía o :0 en caso contrario. TTL key devuelve los segundos restantes, -2 si la clave no existe, y -1 si es permanente.

La forma combinada SET key value EX seconds establece el valor y el TTL de forma atómica, que es lo que conviene para cachés — nunca queda una ventana en la que la clave existe sin expiración. Para cancelar una expiración pendiente se usa PERSIST key.

Los TTL son la base del almacenamiento de sesiones (cierre de sesión automático), la limitación de tasa (INCR + EXPIRE en el primer hit), las claves de idempotencia y las líneas de caché que necesitan olvidar datos obsoletos sin un proceso de barrido.

← Anterior Siguiente →

Source: examples/by-example/76-kv-expire.nx