Creación automática y eliminación de Redis keys
Hasta ahora, en nuestros ejemplos, nunca tuvimos que crear listas vacías antes de empujar elementos o eliminar listas vacías cuando ya no tenían elementos adentro. Es responsabilidad de Redis eliminar Redis Keys cuando las listas se dejan vacías, o crear una lista vacía si la Redis Keys no existe y estamos tratando de agregarle elementos, por ejemplo, con LPUSH.
Esto no es específico de las listas, se aplica a todos los tipos de datos de Redis compuestos de múltiples elementos: Conjuntos, Conjuntos ordenados y Hashes.
Básicamente, podemos resumir el comportamiento con tres reglas:
- Cuando agregamos un elemento a un tipo de datos agregados, si la Redis Keys objetivo no existe, se crea un tipo de datos agregado vacío antes de agregar el elemento.
- Cuando eliminamos elementos de un tipo de datos agregado, si el valor permanece vacío, las Redis keys se destruyen automáticamente.
- Llamar a un comando de solo lectura como LLEN (que devuelve la longitud de la lista), o un comando de escritura que elimina elementos, con una tecla vacía, siempre produce el mismo resultado que si la tecla contiene un tipo de agregado vacío del tipo comando espera encontrar.
Ejemplos de la regla 1:
> del mylist (integer) 1 > lpush mylist 1 2 3 (integer) 3
Sin embargo, no podemos realizar operaciones contra el tipo incorrecto si la Redis Keys existe:
> set foo bar OK > lpush foo 1 2 3 (error) WRONGTYPE Operation against a key holding the wrong kind of value > type foo string
Ejemplos de la regla 2:
> lpush mylist 1 2 3 (integer) 3 > exists mylist (integer) 1 > lpop mylist "3" > lpop mylist "2" > lpop mylist "1" > exists mylist (integer) 0
La Redis Keys ya no existe después de que se hayan reventado todos los elementos.
Ejemplos de la regla 3:
> del mylist (integer) 0 > llen mylist (integer) 0 > lpop mylist (nil)
A continuación te acercamos un listado de diversos posts de Redis, para que puedas continuar leyendo sobre el tema:
- Redis Strings: Se presenta un breve pero claro ejemplo sobre cadenas: Redis Strings y ¿Qué significa que INCR es atómico?
- Alterar y consultar key space: Información complementaria al tema y algunos ejemplos: Alterar y consultar key space
- Redis expiración: Claves con tiempo limitado
:
Presentamos una breve información sobre la expiración y ejemplos: Expiración de claves con tiempo limitado - Listas: Para conocer los primeros pasos en Listas y casos de uso comunes te recomendamos leer: Listas y casos de uso comunes
- Creación automática y eliminación de keys: Para conocer mas sobre las claves y ver algunos ejemplos: Creación automática y eliminación de keys
- Redis Hashes: Para reconocer los principales comandos puedes leer el post: Introducción a Hashes
- Redis Sets: En el post que dejo a continuación se presenta un ejemplo claro y conciso en: Redis Sets y algunos ejemplos
- Conjuntos ordenados de Redis: Para saber mas sobre conjunto sordenados leer: Conjuntos ordenados de Redis
- Puntajes lexicográficos: Con las versiones recientes de Redis 2.8, se introdujo una nueva característica que permite obtener rangos lexicográficamente, para saber mas lea el siguiente post: Puntajes lexicográficos
- Bitmaps: Para conocer los principales comandos y casos de uso comunes los invitamos a leer: Bitmaps
- HyperLogLogs: Es una estructura de datos probabilísticos utilizada para contar cosas únicas, si deseas conocer mas puede leer: HyperLogLogs