📒 

Uso de los comandos de scan en Redis en Linux

Redis, un almacén de estructuras de datos en memoria de código abierto, es conocido por su velocidad y versatilidad como base de datos clave-valor. Una de sus potentes características es la capacidad de iterar incrementalmente a través de conjuntos de datos utilizando comandos de scan. Esto es particularmente útil cuando se trata de grandes conjuntos de datos, ya que permite una recuperación eficiente de los datos sin sobrecargar el servidor. Para los usuarios en un servidor Linux dedicado, el uso de comandos de scan en Redis puede mejorar el rendimiento de manejo de datos al permitir el procesamiento preciso y optimizado de recursos de conjuntos de datos. En este artículo, vamos a explorar cómo utilizar eficazmente los comandos de scan en Redis dentro de un entorno Linux, ofreciendo ejemplos detallados y las mejores prácticas para la gestión y recuperación de datos a escala …

¿Qué son los comandos de scan?

Los comandos de scan en Redis proporcionan una manera de iterar sobre claves, conjuntos, hashes y conjuntos ordenados de una manera no bloqueante. A diferencia del comando KEYS, que puede ser peligroso para grandes conjuntos de datos, ya que devuelve todas las claves coincidentes a la vez, los comandos de scan devuelven un pequeño número de elementos a la vez. Esto minimiza el impacto en el rendimiento y permite la iteración incremental.

Comandos de scan de claves

  1. SCAN: Recorre las claves del espacio de claves.
  2. SSCAN: Recorre los elementos de un conjunto.
  3. HSCAN: Recorre los campos y valores de un hash.
  4. ZSCAN: Itera a través de miembros y puntuaciones en un conjunto ordenado.

Sintaxis básica de los comandos de scan

Cada comando de scan tiene una sintaxis similar:

SCAN cursor [MATCH patrón] [COUNT recuento]
  • cursor: Un número entero que representa la posición desde la que empezar a escanear. Para iniciar una nueva búsqueda, utilice 0.
  • MATCH pattern: (opcional) Un patrón para filtrar las claves devueltas. Admite patrones de tipo glob.
  • COUNT cuenta: (opcional) Una pista para Redis sobre cuántos elementos devolver en cada iteración.

Instalación de Redis en Linux

Antes de sumergirnos en el uso de comandos de scan, asegúrese de que Redis está instalado en su sistema Linux. Para aquellos que utilicen un servidor dedicado Debian, la instalación de Redis es sencilla y puede mejorar la capacidad del servidor para manejar eficientemente el procesamiento de datos en memoria. A continuación se explica cómo instalar Redis en un sistema basado en Debian, garantizando un entorno estable optimizado para operaciones de alto rendimiento.

Siguiendo estos pasos, configurará Redis de forma que aproveche los recursos y la estabilidad de su servidor Debian dedicado, ideal para tareas robustas de manejo de datos.

sudo apt update
sudo apt install redis-server

Para CentOS/RHEL, utilice:

sudo yum install redis

Una vez instalado, inicie el servidor Redis:

sudo systemctl start redis

Conexión a Redis

Abra su terminal y conéctese a su instancia de Redis utilizando la CLI de Redis:

redis-cli

Ahora puedes ejecutar comandos Redis en la CLI.

Uso del comando SCAN

Ejemplo 1: SCAN Básico

Para recuperar todas las claves de la base de datos Redis, puede utilizar:

SCAN 0

Este comando devolverá un cursor y una lista de claves.

Ejemplo 2: Uso de MATCH para filtrar teclas

Si desea encontrar claves que coincidan con un patrón específico, como claves que empiecen por “user:”, puede utilizar:

SCAN 0 MATCH nombreusuario:*

Este comando sólo devuelve las claves que empiezan por “user:”.

Ejemplo 3: Especificación de COUNT

Para indicar cuántas claves debe devolver Redis en cada iteración, puede especificar un recuento:

SCAN 0 COUNT 10

Esto intentará devolver aproximadamente 10 claves. Tenga en cuenta que el número real devuelto puede ser menor.

Ejemplo 4: Iteración a través de todas las claves

Para iterar a través de todas las teclas en múltiples iteraciones, necesita hacer un seguimiento del cursor devuelto. He aquí un sencillo ejemplo de script de shell:

cursor=0
while true; do
result=$(redis-cli SSCAN myset $cursor MATCH manzana:*)
echo "$resultado" # Procesar el resultado según sea necesario
cursor=$(echo "$resultado" | awk 'NR==1{print $1}') # Actualizar el cursor
if [[ "$cursor" == "0" ]]; then
break # Parar cuando el cursor vuelva a ser 0
fi
hecho

Uso del comando SSCAN

El comando SSCAN se utiliza para recorrer los elementos de un conjunto. Su sintaxis es similar a la de SCAN:

SSCAN cursor clave [MATCH patrón] [COUNT recuento]

Ejemplo de SSCAN

Paso 1: Crear un conjunto y añadir elementos

Creemos un conjunto llamado myset y añadámosle algunos elementos:

SADD myset "manzana"
SADD myset "plátano
SADD myset "cereza
SADD myset "dátil
SADD myset "baya del saúco

Paso 2: Utilizar el comando SSCAN

Ahora que tenemos un conjunto llamado myset, podemos utilizar el comando SSCAN para recorrer sus elementos.

  1. Comando SSCAN básico: Supongamos que tenemos un conjunto llamado “myset”. Para recorrer sus elementos:
    SSCAN myset 0
  2. Uso de MATCH:Para filtrar los elementos de un conjunto basándose en un patrón y añadir algunos elementos que incluyan la palabra “mango” y otras variaciones::
    SSCAN myset 0 MATCH mango:*
  3. Iterar a través de un conjunto:Puedes utilizar un bucle para iterar a través de un conjunto :

/bin/bash
cursor=0
echo "Escaneando a través de myset:"
while true; do
# Escanear el conjunto
result=$(redis-cli SSCAN myset $cursor)
# Imprimir los elementos devueltos por SSCAN
echo "$resultado"
# Actualizar el cursor para la siguiente iteración
cursor=$(echo "$resultado" | awk 'NR==1{print $1}')
# Romper el bucle si el cursor vuelve a 0
if [[ "$cursor" == "0" ]]; then
break
fi
hecho

Ejecución del script

  1. Guarda el script como scan_myset.sh.
  2. Hágalo ejecutable:
    chmod x scan_myset.sh
  3. Ejecuta el script:
    ./scan_myset.sh

Uso de los comandos HSCAN y ZSCAN

Comando HSCAN

El comando HSCAN itera a través de los campos y valores de un hash:

HSCAN cursor clave [MATCH patrón] [COUNT recuento]

El comando HSCAN se utiliza para recorrer los campos y valores de un hash.

Paso 1: Crear un hash y añadir campos

  1. Cree un hash llamado myhash y añádale algunos campos:
HSET myhash nombre "Juan Pérez"
HSET myhash edad "30"
HSET myhash ocupación "Desarrollador de software"
Ciudad HSET myhash "San Francisco"
HSET myhash país "EE.UU."

Paso 2: Utilizar HSCAN para recorrer el hash

  1. Utilice el comando HSCAN para recorrer los campos de myhash:
HSCAN myhash 0

Comando ZSCAN

ZSCAN es un comando de Redis utilizado para iterar a través de los miembros de un conjunto ordenado de forma incremental. Permite recuperar miembros junto con sus puntuaciones asociadas de forma eficiente y sin bloqueos. Este comando es particularmente útil para trabajar con grandes conjuntos ordenados donde la obtención de todos los miembros a la vez puede no ser práctica.

El comando ZSCAN recorre los miembros y las puntuaciones de un conjunto ordenado:

ZSCAN cursor clave [MATCH patrón] [COUNT cuenta]

Paso 1: Crear un conjunto ordenado y añadir miembros

Vamos a crear un conjunto ordenado llamado mysortedset y añadir algunos miembros con puntuaciones:

ZADD mysortedset 1 "manzana"
ZADD mysortedset 2 "banana" (plátano)
ZADD mysortedset 3 "cereza"

Comando ZSCAN básico:

Para iniciar el scan del conjunto clasificado, utilice:

ZSCAN mysortedset 0

Paso 2: Uso de MATCH para filtrar miembros (opcional)

Si desea filtrar los miembros devueltos por ZSCAN, puede utilizar la opción MATCH. Por ejemplo, para encontrar los miembros que contienen la letra “e”, puede ejecutar:

ZSCAN mysortedset 0 MATCH *e*

Prácticas recomendadas para el uso de comandos de scan

  1. Utilice SCAN en lugar de KEYS: Evite utilizar el comando KEYS en producción, ya que puede bloquear el servidor. Utilice SCAN para la iteración sin bloqueo.
  2. Combine con MATCH y COUNT: Utilice las opciones MATCH y COUNT para mejorar el rendimiento y limitar el conjunto de resultados.
  3. Maneje grandes conjuntos de datos: Cuando se trate de grandes conjuntos de datos, procese las claves por lotes utilizando cursores para gestionar la memoria de forma eficaz.
  4. Pruebe en desarrollo: Pruebe siempre su lógica de scan en un entorno de desarrollo para asegurarse de que se comporta como se espera antes de desplegarla en producción.

Conclusión

El uso de los comandos de scan en Redis le permite iterar eficientemente a través de grandes conjuntos de datos en un entorno Linux sin sobrecargar su servidor. Entendiendo cómo usar SCAN, SSCAN, HSCAN, y ZSCAN, puedes gestionar y recuperar datos de Redis de forma efectiva. Estos comandos son esenciales para construir aplicaciones escalables que requieren procesamiento de datos en tiempo real. Para más información y uso detallado, consulta la documentación oficial de Redis y experimenta con estos comandos en tu entorno Redis.