v0.1.0

Referencia de comandos

Fase 1 — 23 comandos. Cada uno devuelve una respuesta en formato RESP.


Comandos de Strings

SET clave valor [EX seg] [PX ms] [NX] [XX] Fase 1

Almacena un valor de texto bajo una clave. Si la clave ya existia, la sobreescribe (salvo que se use NX o XX). Al establecer un nuevo valor, la expiracion anterior se elimina — a menos que se especifique una nueva con EX o PX.

Retorna: OK al guardar, nil si NX/XX impide la escritura
OpcionDescripcion
EX NExpira en N segundos a partir de ahora
PX NExpira en N milisegundos a partir de ahora
NXSolo escribe si la clave no existe (Set if Not eXists)
XXSolo escribe si la clave ya existe (Set if eXists)
repl
> SET nombre "joel"
OK

> SET sesion "token123" EX 3600
OK

> SET lock "p1" NX
OK                  # no existia, se establece

> SET lock "p2" NX
(nil)              # ya existia, NX lo impide
GET clave

Devuelve el valor de tipo string asociado a la clave. Si la clave no existe, expiro o es de un tipo distinto a string, devuelve nil o un error WRONGTYPE según el caso.

Retorna: Bulk String con el valor, o nil
repl
> GET nombre
"joel"

> GET noExiste
(nil)
DEL clave [clave ...]

Elimina una o varias claves de la base de datos activa. Las claves que no existen son ignoradas (no cuentan en el total eliminado).

Retorna: Integer — numero de claves efectivamente eliminadas
repl
> DEL nombre sesion contador
(integer) 3

> DEL noExiste
(integer) 0
EXISTS clave [clave ...]

Verifica si las claves existen en la base de datos activa. Si se especifica la misma clave varias veces, suma una por cada aparicion.

Retorna: Integer — numero de claves existentes (contando repetidas)
repl
> EXISTS nombre
(integer) 1

> EXISTS nombre nombre nombre
(integer) 3       # misma clave cuenta 3 veces

> EXISTS noExiste
(integer) 0
EXPIRE clave segundos

Establece un tiempo de expiracion en segundos para una clave existente. Cuando el tiempo expira, la clave se elimina automaticamente. Si la clave ya tenia una expiracion, la sobreescribe.

Retorna: 1 si se establecio, 0 si la clave no existe
repl
> SET token "abc123"
OK

> EXPIRE token 60
(integer) 1

> EXPIRE noExiste 60
(integer) 0
TTL clave

Devuelve el tiempo de vida restante de una clave en segundos.

Retorna: N segundos restantes, -1 sin expiracion, -2 no existe
ValorSignificado
N > 0Segundos restantes antes de que expire
-1La clave existe pero no tiene expiracion configurada
-2La clave no existe o ya expiro
repl
> TTL token
(integer) 58

> TTL nombre      # sin expiracion
(integer) -1

> TTL fantasma    # no existe
(integer) -2
INCR clave

Incrementa en 1 el valor entero de una clave. Si la clave no existe, la inicializa en 0 antes de incrementar. Si el valor no es un entero valido, devuelve un error. Preserva la expiracion existente.

Retorna: Integer — el nuevo valor despues del incremento
repl
> INCR visitas
(integer) 1

> INCR visitas
(integer) 2

> INCR visitas
(integer) 3
DECR clave

Decrementa en 1 el valor entero de una clave. Si la clave no existe, la inicializa en 0 antes de decrementar. Preserva la expiracion existente.

Retorna: Integer — el nuevo valor despues del decremento
repl
> SET inventario "10"
OK

> DECR inventario
(integer) 9

> DECR inventario
(integer) 8
MGET clave [clave ...]

Obtiene los valores de multiples claves en un solo round-trip de red. Las claves que no existen, expiraron o son de un tipo no-string devuelven nil en su posicion correspondiente.

Retorna: Array con un elemento por cada clave solicitada
repl
> MSET a "uno" b "dos" c "tres"
OK

> MGET a b c z
1) "uno"
2) "dos"
3) "tres"
4) (nil)       # "z" no existe
MSET clave valor [clave valor ...]

Almacena multiples pares clave-valor de forma atomica. Siempre tiene exito — nunca falla. Las claves existentes son sobreescritas.

Retorna: OK siempre
repl
> MSET usuario "joel" pais "mx" version "1"
OK
APPEND clave valor

Concatena un string al final del valor existente de la clave. Si la clave no existe, se crea con el valor proporcionado (equivale a SET).

Retorna: Integer — longitud en bytes del string resultante
repl
> APPEND saludo "Hola"
(integer) 4

> APPEND saludo ", mundo"
(integer) 11

> GET saludo
"Hola, mundo"
STRLEN clave

Devuelve la longitud en bytes del valor string de la clave. Si la clave no existe, devuelve 0. Si la clave es de otro tipo, devuelve un error.

Retorna: Integer — longitud en bytes
repl
> STRLEN saludo
(integer) 11

> STRLEN noExiste
(integer) 0
SETNX clave valor

Establece el valor solo si la clave no existe (Set if Not eXists). Util para implementar bloqueos distribuidos simples o inicializaciones de una sola vez.

Retorna: 1 si se establecio, 0 si la clave ya existia
repl
> SETNX mutex "proceso_1"
(integer) 1       # establecido

> SETNX mutex "proceso_2"
(integer) 0       # ya existia, ignorado
SETEX clave segundos valor

Almacena un valor con expiracion en segundos. Es equivalente a SET clave valor EX segundos. El orden de los argumentos es: nombre de clave, tiempo, valor.

Retorna: OK
ℹ️
Atencion al orden: SETEX clave segundos valor — el tiempo va antes del valor.
repl
> SETEX sesion 3600 "token_abc"
OK

> TTL sesion
(integer) 3600
GETEX clave [EX seg | PX ms | EXAT ts | PXAT ts_ms | PERSIST]

Obtiene el valor de una clave y opcionalmente modifica su expiracion en la misma operacion. Sin opciones, se comporta igual que GET.

Retorna: Bulk String con el valor, o nil
OpcionDescripcion
EX NNueva expiracion en N segundos
PX NNueva expiracion en N milisegundos
EXAT NExpira en el timestamp Unix N (segundos)
PXAT NExpira en el timestamp Unix N (milisegundos)
PERSISTElimina la expiracion — la clave se vuelve persistente
repl
> GETEX sesion EX 7200
"token_abc"    # y renueva el TTL a 7200s

> GETEX sesion PERSIST
"token_abc"    # y elimina la expiracion

Comandos de servidor

PING [mensaje]

Verifica la conectividad con el servidor. Sin argumento devuelve PONG. Con argumento, devuelve el argumento como eco.

Retorna: PONG o el mensaje proporcionado
repl
> PING
PONG

> PING "sigo vivo"
"sigo vivo"
ECHO mensaje

Devuelve el mensaje tal cual como un Bulk String. Util para pruebas de round-trip y depuracion.

Retorna: Bulk String con el mensaje
repl
> ECHO "hola mundo"
"hola mundo"
DBSIZE

Devuelve el numero de claves activas (no expiradas) en la base de datos activa de la conexion actual.

Retorna: Integer — numero de claves
repl
> DBSIZE
(integer) 5
FLUSHALL

Elimina todas las claves de todas las bases de datos (no solo la activa). Operacion destructiva e irreversible.

Retorna: OK
⚠️
Cuidado — elimina los datos de todas las bases de datos de todas las conexiones activas, no solo de la tuya.
repl
> FLUSHALL
OK

> DBSIZE
(integer) 0
KEYS patron

Devuelve todas las claves de la base de datos activa que coincidan con el patron glob. Solo devuelve claves activas (las expiradas se filtran).

Retorna: Array con las claves que coinciden
PatronCoincide con
*Cualquier clave (lista todo)
h?llohallo, hello, hillo (un caracter cualquiera)
h*llohllo, heeello (cualquier número de caracteres)
user:*Todas las claves que empiezan con "user:"
repl
> KEYS *
1) "nombre"
2) "visitas"
3) "user:42"

> KEYS user:*
1) "user:42"
TYPE clave

Devuelve el tipo de dato almacenado bajo una clave.

Retorna: Simple String con el tipo
RespuestaSignificado
stringValor de texto (el unico tipo disponible en Fase 1)
listLista (disponible en Fase 2)
hashHash / mapa (disponible en Fase 3)
setConjunto (disponible en Fase 4)
noneLa clave no existe o expiro
repl
> TYPE nombre
string

> TYPE noExiste
none
RENAME clave nuevaClave

Cambia el nombre de una clave. Si nuevaClave ya existe, se sobreescribe. Si clave no existe, devuelve un error.

Retorna: OK
repl
> SET nombre "joel"
OK

> RENAME nombre apodo
OK

> GET apodo
"joel"

> GET nombre
(nil)
SELECT indice

Cambia la base de datos activa para la conexion actual. El rango valido es de 0 a DB_COUNT - 1 (por defecto 0–15). Cada conexion mantiene su propio indice — cambiar de base en una conexion no afecta a las demas.

Retorna: OK
ℹ️
El cliente REPL actualiza el prompt automaticamente para mostrar la base activa: velo 127.0.0.1:6380[3]>
repl
velo ...[0]> SELECT 3
OK

velo ...[3]> DBSIZE
(integer) 0           # base 3 esta vacia

velo ...[3]> SELECT 99
(error) ERR el indice de base de datos esta fuera de rango