Ahorre 15% en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código: Skills Comenzar
Secciones
Linux Servidores dedicados

Uso de Comandos Redis Scan en Linux: Una Guía Completa

Redis es un almacén de estructuras de datos en memoria, de código abierto y alto rendimiento, ampliamente utilizado como base de datos clave-valor, caché y agente de mensajes. Entre sus características más poderosas —aunque a menudo subutilizadas— se encuentran los comandos scan, que te permiten iterar incrementalmente a través de grandes conjuntos de datos sin bloquear tu servidor ni degradar el rendimiento.

Si ejecutas Redis en un servidor basado en Linux, dominar los comandos scan es esencial para construir aplicaciones escalables y listas para producción. A diferencia del peligroso comando KEYS, que recupera todas las claves coincidentes en una única operación de bloqueo, los comandos scan devuelven datos en lotes pequeños y manejables, lo que los convierte en la herramienta correcta para cualquier entorno que maneje volúmenes significativos de datos.

En esta guía completa, aprenderás exactamente cómo usar SCAN, SSCAN, HSCAN y ZSCAN en Redis en Linux, con ejemplos del mundo real, scripts de shell y mejores prácticas para implementaciones en producción.

¿Qué son los comandos Redis Scan?

Los comandos Redis scan proporcionan un mecanismo basado en cursor y sin bloqueo para iterar sobre claves, conjuntos, hashes y conjuntos ordenados. Cada comando devuelve un pequeño subconjunto de elementos por llamada junto con un valor de cursor, que utilizas para continuar la iteración en llamadas posteriores. Cuando el cursor vuelve a 0, el conjunto de datos completo ha sido recorrido.

Este enfoque es fundamentalmente más seguro y eficiente que KEYS, que bloquea todo el servidor Redis hasta que termina de escanear — un problema crítico en entornos de producción con millones de claves.

Los cuatro comandos Scan principales

ComandoPropósito
SCANItera sobre claves en todo el espacio de claves
SSCANItera sobre elementos en un Conjunto
HSCANItera sobre campos y valores en un Hash
ZSCANItera sobre miembros y puntuaciones en un Conjunto Ordenado

Sintaxis Básica de Comandos de Escaneo

Los cuatro comandos de escaneo comparten una estructura de sintaxis consistente:

SCAN cursor [MATCH pattern] [COUNT count]
SSCAN key cursor [MATCH pattern] [COUNT count]
HSCAN key cursor [MATCH pattern] [COUNT count]
ZSCAN key cursor [MATCH pattern] [COUNT count]

Parámetros Explicados

  • cursor — Un entero que representa la posición actual en la iteración. Siempre comienza con 0 para iniciar un nuevo escaneo. Redis devuelve un nuevo cursor con cada respuesta; úsalo en la siguiente llamada para continuar.
  • MATCH pattern *(opcional)* — Filtra resultados usando coincidencia de patrones de estilo glob (p. ej., user:*, *session*). Nota: el filtrado ocurre *después* de la recuperación, por lo que las coincidencias de baja densidad pueden requerir muchas iteraciones.
  • COUNT count *(opcional)* — Una sugerencia a Redis sobre cuántos elementos devolver por iteración. Esto no es un límite estricto; Redis puede devolver más o menos. El valor predeterminado es 10.

Instalación de Redis en Linux

Antes de usar comandos scan, necesitas tener Redis instalado y ejecutándose en tu servidor Linux. Ya sea que estés en un entorno de producción de alto tráfico o en una máquina de desarrollo, el proceso de instalación es sencillo.

> Consejo: Para cargas de trabajo de producción que requieren Redis a escala, considera implementar en un plan de VPS Hosting o un Servidor Dedicado para asegurar que tienes la memoria, CPU y recursos de I/O que Redis requiere.

Instalación de Redis en Debian/Ubuntu

sudo apt update
sudo apt install redis-server -y

Instalación de Redis en CentOS/RHEL

sudo yum install redis -y

Iniciando el Servicio Redis

sudo systemctl start redis
sudo systemctl enable redis

Verificando la Instalación

sudo systemctl status redis

Deberías ver active (running) en la salida. Ahora conecta a la CLI de Redis:

redis-cli

Una vez dentro de la CLI, prueba la conexión:

127.0.0.1:6379> PING
PONG

Estás listo para comenzar a usar comandos scan.

Uso del Comando SCAN

El comando SCAN itera sobre todas las claves en el espacio de claves de Redis. Es el reemplazo de propósito general para el comando KEYS en entornos de producción.

Ejemplo 1: SCAN Básico

Para comenzar a escanear todas las claves en la base de datos, comienza con el cursor 0:

SCAN 0

Salida de ejemplo:

1) "14"
2) 1) "session:abc123"
   2) "user:1001"
   3) "product:55"

El primer elemento (14) es el siguiente cursor. Úsalo en tu próxima llamada SCAN. Cuando el cursor devuelto sea 0, la iteración completa habrá terminado.

Ejemplo 2: Filtrado de Claves con MATCH

Para recuperar solo las claves que coincidan con un patrón específico — por ejemplo, todas las claves con prefijo user::

SCAN 0 MATCH user:*

Esto devuelve solo las claves cuyos nombres comienzan con user:. Continúa iterando hasta que el cursor devuelva 0 para asegurar que hayas escaneado todo el espacio de claves.

Ejemplo 3: Control del Tamaño de Lote con COUNT

Para sugerir que Redis devuelva aproximadamente 100 claves por iteración:

SCAN 0 COUNT 100

Recuerda: COUNT es una *sugerencia*, no una garantía. Redis puede devolver resultados ligeramente mayores o menores dependiendo de las estructuras de datos internas.

Ejemplo 4: Iteración Completa del Espacio de Claves con un Script de Shell

En escenarios del mundo real, necesitarás iterar a través del espacio de claves completo de forma programática. Aquí hay un script Bash listo para producción que itera a través de todas las claves que coincidan con un patrón:

#!/bin/bash

cursor=0
echo "Starting full keyspace scan..."

while true; do
    # Execute SCAN and capture the result
    result=$(redis-cli SCAN $cursor MATCH user:* COUNT 100)

    # Extract the new cursor (first line of output)
    cursor=$(echo "$result" | head -n 1)

    # Extract and display the keys (remaining lines)
    keys=$(echo "$result" | tail -n +2)
    echo "Keys found:"
    echo "$keys"

    # Break the loop when cursor returns to 0
    if [[ "$cursor" == "0" ]]; then
        echo "Scan complete."
        break
    fi
done

Para ejecutar este script:

chmod +x scan_keys.sh
./scan_keys.sh

Uso del Comando SSCAN

SSCAN se utiliza para iterar incrementalmente a través de los miembros de un Set de Redis. Sigue el mismo patrón basado en cursor que SCAN.

Paso 1: Crear un Set y Agregar Miembros

SADD myset "apple"
SADD myset "banana"
SADD myset "cherry"
SADD myset "date"
SADD myset "elderberry"
SADD myset "mango"
SADD myset "mango:tropical"
SADD myset "mango:dried"

Paso 2: SSCAN Básico

Escanear todos los elementos en myset comenzando desde el cursor 0:

SSCAN myset 0

Paso 3: Filtrar Elementos con MATCH

Para recuperar solo elementos que coincidan con el patrón mango:*:

SSCAN myset 0 MATCH mango:*

Paso 4: Iterar a Través de un Set con un Script de Shell

#!/bin/bash

cursor=0
echo "Scanning through myset:"

while true; do
    # Scan the set
    result=$(redis-cli SSCAN myset $cursor COUNT 10)

    # Update cursor
    cursor=$(echo "$result" | head -n 1)

    # Print elements returned
    elements=$(echo "$result" | tail -n +2)
    echo "Elements: $elements"

    # Stop when cursor returns to 0
    if [[ "$cursor" == "0" ]]; then
        echo "Set scan complete."
        break
    fi
done

Guardar como scan_myset.sh, hacerlo ejecutable y ejecutar:

chmod +x scan_myset.sh
./scan_myset.sh

Uso del Comando HSCAN

HSCAN itera a través de los campos y valores de un Hash de Redis. Esto es particularmente útil cuando un hash contiene cientos o miles de campos y necesitas procesarlos sin cargar todo en memoria a la vez.

Paso 1: Crear un Hash y Agregar Campos

HSET myhash name "John Doe"
HSET myhash age "30"
HSET myhash occupation "Software Developer"
HSET myhash city "San Francisco"
HSET myhash country "USA"
HSET myhash email "john@example.com"

Paso 2: HSCAN Básico

HSCAN myhash 0

Salida de ejemplo:

1) "0"
2) 1) "name"
   2) "John Doe"
   3) "age"
   4) "30"
   5) "occupation"
   6) "Software Developer"
   ...

Los resultados se devuelven como pares de campo-valor alternados.

Paso 3: Filtrar Campos Hash con MATCH

Para recuperar solo campos cuyos nombres contienen "city" o coinciden con un patrón:

HSCAN myhash 0 MATCH *city*

Paso 4: Iterar a Través de un Hash con un Script de Shell

#!/bin/bash

cursor=0
echo "Scanning hash: myhash"

while true; do
    result=$(redis-cli HSCAN myhash $cursor COUNT 10)
    cursor=$(echo "$result" | head -n 1)
    fields=$(echo "$result" | tail -n +2)

    echo "Fields and values:"
    echo "$fields"

    if [[ "$cursor" == "0" ]]; then
        echo "Hash scan complete."
        break
    fi
done

Usando el Comando ZSCAN

ZSCAN itera a través de los miembros y puntuaciones de un Redis Sorted Set. Los conjuntos ordenados se utilizan comúnmente para tablas de clasificación, colas de prioridad y datos de series temporales — todos escenarios donde escanear colecciones grandes de manera eficiente es crítico.

Paso 1: Crear un Sorted Set y Agregar Miembros

ZADD mysortedset 1 "apple"
ZADD mysortedset 2 "banana"
ZADD mysortedset 3 "cherry"
ZADD mysortedset 4 "date"
ZADD mysortedset 5 "elderberry"

Paso 2: ZSCAN Básico

ZSCAN mysortedset 0

Salida de ejemplo:

1) "0"
2) 1) "apple"
   2) "1"
   3) "banana"
   4) "2"
   5) "cherry"
   6) "3"

Los resultados se devuelven como pares miembro-puntuación alternados.

Paso 3: Filtrar Miembros con MATCH

Para encontrar todos los miembros cuyos nombres contienen la letra "e":

ZSCAN mysortedset 0 MATCH *e*

Paso 4: Script Completo de Iteración de Sorted Set

#!/bin/bash

cursor=0
echo "Scanning sorted set: mysortedset"

while true; do
    result=$(redis-cli ZSCAN mysortedset $cursor COUNT 10)
    cursor=$(echo "$result" | head -n 1)
    members=$(echo "$result" | tail -n +2)

    echo "Members and scores:"
    echo "$members"

    if [[ "$cursor" == "0" ]]; then
        echo "Sorted set scan complete."
        break
    fi
done

Comparación de comandos Scan: Referencia rápida

Característica`SCAN``SSCAN``HSCAN``ZSCAN`
ObjetivoTodas las clavesMiembros del conjuntoCampos/valores de hashMiembros/puntuaciones del conjunto ordenado
Requiere nombre de claveNo
Admite MATCH
Admite COUNT
Formato de salidaNombres de claveCadenas de miembrosPares campo-valorPares miembro-puntuación
BloqueoNoNoNoNo

Mejores prácticas para usar comandos Redis SCAN en producción

1. Siempre usa SCAN en lugar de KEYS en producción

El comando KEYS es de un solo hilo y bloquea todas las demás operaciones de Redis hasta que se completa. En una base de datos con millones de claves, esto puede causar picos de latencia severos. Nunca uses KEYS en producción. SCAN es la alternativa correcta y sin bloqueos.

2. Ajusta COUNT según el tamaño de tu conjunto de datos

Para conjuntos de datos pequeños (< 1.000 claves), el valor predeterminado COUNT 10 está bien. Para conjuntos de datos grandes, aumenta COUNT a 1001000 para reducir el número de viajes de ida y vuelta mientras mantienes las respuestas individuales manejables.

3. No confíes solo en MATCH para la eficiencia

El filtro MATCH se aplica *después* de que Redis recupera elementos internamente. Si tu patrón coincide solo con una pequeña fracción de claves, Redis aún escanea el conjunto de datos completo internamente. Usa convenciones de nombres de claves (por ejemplo, prefijos consistentes) para hacer MATCH más efectivo.

4. Procesa resultados en lotes

Nunca acumules todos los resultados del escaneo en memoria antes de procesarlos. En su lugar, procesa cada lote inmediatamente cuando se devuelve. Esto es especialmente importante en servidores con memoria limitada.

5. Maneja el estado del cursor cuidadosamente

Siempre inicializa el cursor a 0 y actualízalo con cada respuesta. Si tu aplicación se bloquea durante el escaneo, reinicia desde 0. Los cursores de Redis no persisten entre reinicios del servidor.

6. Prueba exhaustivamente en desarrollo primero

Antes de implementar la lógica basada en escaneo en producción, valídala en un entorno de prueba con un conjunto de datos representativo. Verifica que tu bucle termine correctamente cuando el cursor regrese a 0.

7. Asegura tu instancia de Redis

Redis nunca debe exponerse a internet público sin autenticación. Usa requirepass en tu configuración de Redis, vincula a localhost o una interfaz de red privada, y usa reglas de firewall para restringir el acceso.

Elegir el Entorno de Hosting Correcto para Redis

El rendimiento de Redis está directamente vinculado a la RAM disponible, la velocidad de CPU y la latencia de red. Elegir la infraestructura de hosting correcta es tan importante como escribir comandos Redis eficientes.

  • Desarrollo y proyectos pequeños: Shared Web Hosting puede ser suficiente para uso ligero de Redis, aunque siempre se prefieren instancias Redis dedicadas.
  • Aplicaciones en crecimiento: Un plan de VPS Hosting te proporciona recursos dedicados, acceso root y la capacidad de ajustar la configuración de Redis (maxmemory, configuración de persistencia, etc.) a tus necesidades exactas.
  • Sistemas de producción de alto tráfico: Dedicated Servers proporcionan la máxima RAM y recursos de CPU que Redis puede utilizar, eliminando completamente la contención de recursos.
  • Cargas de trabajo de IA y ML usando Redis como almacén de vectores: GPU Hosting ofrece la potencia computacional necesaria para la generación de embeddings y búsqueda de similitud junto con Redis.

Para aplicaciones que también requieren un panel de control web para una gestión más fácil, VPS con cPanel proporciona una interfaz amigable junto con control total del servidor.

Solución de problemas comunes

SCAN devuelve 0 elementos repetidamente

Esto generalmente significa que tu patrón MATCH no coincide con ninguna clave, o el conjunto de datos está vacío. Verifica tu nomenclatura de claves con DBSIZE para comprobar el recuento total de claves.

127.0.0.1:6379> DBSIZE
(integer) 15420

El cursor nunca vuelve a 0

Esto no debería ocurrir en una instancia Redis estable. Si ocurre, verifica la compatibilidad de versión de Redis (los comandos scan requieren Redis 2.8+) o interrupciones de conexión que restablezcan tu seguimiento de cursor.

El script se cuelga indefinidamente

Asegúrate de que tu bucle lea correctamente el cursor de la primera línea de la salida redis-cli. Un error de análisis que siempre produce un cursor distinto de cero causará un bucle infinito.

Conclusión

Los comandos de escaneo de Redis — SCAN, SSCAN, HSCAN y ZSCAN — son herramientas indispensables para cualquier desarrollador o administrador de sistemas que trabaje con Redis a escala en Linux. Proporcionan un mecanismo seguro, sin bloqueos y basado en cursores para iterar a través de grandes conjuntos de datos sin los riesgos de rendimiento asociados con comandos como KEYS.

Al combinar comandos de escaneo con patrones MATCH, sugerencias COUNT apropiadas y scripts de shell bien estructurados, puedes construir canalizaciones de procesamiento de datos eficientes que se escalen adecuadamente con el tamaño de tu conjunto de datos. Seguir las mejores prácticas descritas en esta guía — particularmente en torno a la seguridad en producción, la gestión de memoria y la selección de infraestructura — asegurará que tus implementaciones de Redis sigan siendo eficientes y confiables.

Para las opciones de comando más actuales y detalles de configuración avanzada, siempre consulta la documentación oficial de Redis. Y cuando estés listo para implementar Redis en un entorno Linux de grado de producción, explora el Hosting VPS y los Servidores Dedicados de AlexHost para infraestructura construida para manejar cargas de trabajo exigentes e intensivas en memoria.