Controladores

Controlador Redis

Esta documentación explica la implementación del controlador Redis y cómo los parámetros de conexión se corresponden con los campos de la interfaz de usuario en la aplicación Gigantics. Redis es un almacén clave-valor, así que el controlador agrupa las claves en entidades según su prefijo y convierte cada clave en un registro.

Redis aparece en el grupo Big data del selector de drivers y está disponible en el plan de licencia open source.

Parámetros de Conexión

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
Hostsocket.host en el cliente redisNombre de host o dirección IP del servidor RedisSílocalhost
Puertosocket.port en el cliente redisPuerto en el que escucha el servidor RedisSí6379 (de driverPorts)
Base de datosdatabase en el cliente redis (se envía como db)Índice numérico de la base de datos Redis. Déjalo vacío para la base de datos 0No0
Usuariousername en el cliente redisUsuario ACL (Redis 6 o posterior)NoNinguno
Contraseñapassword en el cliente redisContraseña del usuario, o la contraseña de requirepassNoNinguno

La conexión se comprueba con el comando PING.

Detalles Técnicos

El controlador Redis utiliza la biblioteca de Node.js redis (node-redis v5).

Claves y entidades

El controlador recorre todas las claves con SCAN y las agrupa en entidades:

  • El nombre de la entidad es la parte de la clave anterior al primer :. Las claves customer:1 y customer:2 pertenecen a la entidad customer
  • Una clave sin : es una entidad por sí misma (por ejemplo leaderboard)
  • Si un prefijo tiene claves de más de un tipo Redis, hay una entidad por tipo, con el nombre <prefijo>@<tipo>. Los hashes user:1 y user:2 y el string user:count son las entidades user@hash y user@string
  • El número de claves se muestra como número de filas de la entidad, y la descripción es Redis <tipo> (<n> keys)
Claves Redis                   Entidades
---------------------------    -----------------------------------
customer:1        (hash)  ─┐
customer:2        (hash)  ─┴─> customer     Redis hash (2 keys)
session:ab12      (string)───> session      Redis string (1 keys)
leaderboard       (zset)  ───> leaderboard  Redis zset (1 keys)
user:1            (hash)  ───> user@hash    Redis hash (1 keys)
user:count        (string)───> user@string  Redis string (1 keys)

Campos

CampoTipoDescripción
_keystringClave Redis completa. Es la clave primaria de la entidad
campos del hashstringEn los hashes, un campo por cada campo de hash encontrado en las claves
_valuestring u objectEn strings, listas, sets, sets ordenados y streams, el valor de la clave
_ttlnumberSegundos que faltan para que la clave caduque. Vacío si la clave no caduca

Proceso de lectura

  1. Lee la clave con el nombre de la entidad, si existe, y todas las claves que cumplen <entidad>:*. Si el nombre de la entidad contiene : o *, se usa como patrón. Una entidad <prefijo>@<tipo> lee solo las claves de su prefijo que son de ese tipo
  2. Cada registro tiene _key, _type (el tipo Redis) y _ttl
  3. El valor depende del tipo:
Tipo RedisRegistro
string_value con el texto
hashUn campo por cada campo del hash
list_value con un array JSON de los elementos
set_value con un array JSON de los miembros
zset_value con un array JSON de { value, score }
stream_value con un array JSON de { id, message }, uno por entrada, donde message tiene los campos de la entrada

Las condiciones where se evalúan sobre cada registro en Gigantics, no en Redis (ver Filtros aplicados por Gigantics). La operación Leer consulta (Read Query) debe contener un objeto where en JSON, por ejemplo {"status": "active"}. Se admiten límite y offset.

Proceso de escritura

Para cada registro:

  • La clave es _key. Si el registro no tiene _key (por ejemplo una fila de un tap SQL), la clave es <entidad>:<clave primaria>, con los valores de las columnas de la clave primaria unidos por :. Si la entidad no tiene clave primaria, la clave es <entidad>:<n>, donde n es el número de registro
  • El tipo es _type. Si el registro no tiene _type, es el tipo de la entidad Redis de la que viene. Un registro de otra fuente se escribe como string si tiene un campo _value, y como hash con todos sus campos si no lo tiene
  • string: SET con _value. El resto de campos no se escribe
  • hash: la clave se borra y se vuelve a crear con HSET con todos los campos salvo _key, _ttl y _type, en un único MULTI, para que no queden campos de un valor anterior
  • list, set y zset: la clave se borra y se vuelve a crear (RPUSH, SADD, ZADD) con el array JSON de _value
  • stream: la clave se borra y se vuelve a crear con un XADD por cada entrada del array JSON de _value, con los mismos IDs de entrada. Los grupos de consumidores no se copian

Redis guarda textos: las fechas se escriben en formato ISO 8601, los objetos y arrays como JSON, y los valores vacíos como texto vacío.

Una fila de un tap SQL se escribe como hash y no como un texto JSON para que cada columna siga siendo un campo: la entidad Redis tiene los mismos campos que la tabla, y cada uno se puede enmascarar o volver a leer por separado.

Si _ttl es un número igual o mayor que 0, la clave caduca tras ese número de segundos, como en el tap (SET con EX en los strings, EXPIRE en el resto de tipos). Las fracciones de segundo se redondean hacia arriba, y un _ttl de 0 (una clave a la que le quedaba menos de un segundo en el tap) caduca tras 1 segundo. Las claves con _ttl vacío o negativo no caducan.

Modos de escritura:

Modo de escrituraComportamiento
DropBorra las claves de la entidad antes de escribir: la clave <entidad> y las claves que cumplen <entidad>:*, que se buscan con SCAN y se borran con UNLINK en lotes de 1000. En una entidad <prefijo>@<tipo>, solo las claves de ese tipo. El resto de claves de la base de datos no se tocan
TruncateIgual que Drop
Append, Update, MergeEscribe las claves y sobrescribe las que ya existen

Opciones de Autenticación

Tipo de AutenticaciónMapeo UIDescripción
NingunoSin credencialesPara servidores Redis sin contraseña
Usuario / ContraseñaCampos Usuario y ContraseñaEnvía el usuario y la contraseña. Deja Usuario vacío para usar solo la contraseña de requirepass
Gestor de ContraseñasCampos del gestor de contraseñasObtiene el usuario y la contraseña de un gestor de contraseñas externo

Soporte de Túnel SSH

El controlador Redis se conecta mediante host y puerto, así que admite túneles SSH. Para más información sobre cómo configurarlos, consulta la documentación de Túneles SSH.

Endpoints de API Utilizados

Las conexiones Redis se utilizan en:

  • Creación de taps (descubrimiento de la fuente de datos)
  • Creación de sinks (destino de los datos anonimizados)
  • Ejecución de pipelines (extracción y carga de datos)

Dependencia del Controlador Node.js

  • Biblioteca: redis
  • Propósito: cliente Redis para Node.js

Parámetros Personalizados

Los Parámetros personalizados (YAML) se combinan con la configuración del controlador:

url: redis://user:password@redis.example.com:6379/2  # URL de conexión, sustituye Host y Puerto
batchSize: 1000    # Tamaño de lote si el job o la regla no indican ninguno (1000)

Si se indica url, Host y Puerto se ignoran. Usa el esquema rediss:// para conexiones TLS.

Ejemplos de Configuración

Conexión TLS

url: rediss://redis.example.com:6380