Saltar a contenido

Documentación: Nodo Memory Set

Descripción General

El nodo Memory Set almacena un valor en Redis bajo una clave, con TTL (tiempo de vida) opcional. Es parte del conjunto de nodos de memoria (memorynodes) que utilizan Redis como almacén de datos compartido entre ejecuciones de automatizaciones. Use este nodo cuando necesite guardar un valor para usarlo después con Memory Get, Memory Check u otros procesos.

Tipo de nodo: memory_set
Clase: action
Paquete: pkg/automationnode/memorynodes

¿Cuándo usar este nodo?

Use este nodo cuando necesite:

  • Almacenar datos calculados o recibidos para reutilizarlos en la misma automatización u otras
  • Implementar caché con expiración usando ttl para datos temporales (por ejemplo, tokens, sesiones)
  • Compartir datos entre ejecuciones de automatizaciones (los valores en Redis persisten entre ejecuciones)

Configuración del Nodo

Formulario de configuración del nodo Memory Set

El nodo requiere clave y valor, y opcionalmente TTL. Puede configurarlo en la vista Form o en el JSON Editor.

Estructura JSON (Parámetros de entrada)

{
  "key": "",
  "value": "",
  "ttl": ""
}

Campos Requeridos

Campo Tipo Descripción
key string La clave bajo la cual se almacenará el valor en Redis
value string El valor a almacenar

Campos Opcionales

Campo Tipo Descripción
ttl string Tiempo de vida en segundos. Por defecto "0" (sin expiración)
  • ttl = "0" o vacío: la clave no expira.
  • ttl = "3600": la clave expira en 1 hora (3600 segundos).

Los campos pueden definirse con templates, por ejemplo: {{trigger.output_field}}.

Ejemplo de configuración

{
  "key": "session_data",
  "value": "datos_de_sesion_123",
  "ttl": "3600"
}

Salidas (Output)

El nodo produce un objeto con la clave y el valor almacenados:

Campo Tipo Descripción
key string La clave utilizada
value string El valor almacenado

Ejemplo de salida

{
  "key": "session_data",
  "value": "datos_de_sesion_123"
}

Puede referenciar esta salida en nodos posteriores mediante expresiones de template, por ejemplo {{memory_set.key}}, {{memory_set.value}}.

Conectores (Connectors)

Conector Descripción
continue Se usa siempre que la ejecución finaliza correctamente

En caso de error, el flujo depende de la configuración OnError del nodo.

Validación

  • key debe ser un string no vacío.
  • value debe ser un string no vacío.
  • ttl no se valida en la fase de validación; si se proporciona, debe ser un entero válido en string (por ejemplo "3600"). Un valor no numérico provocará error durante la ejecución.

Dependencias

  • Redis: El nodo utiliza redis_singleton.GetRedisProducer(). Se requiere configuración de Redis en las variables de entorno (REDIS_URL, REDIS_PASSWORD).

Comportamiento ante errores

  • Si ttl no es un número válido, la ejecución falla.
  • Si Redis no está disponible o falla la operación SET, la ejecución falla.

Nodos relacionados

Nodo Descripción
Memory Get (memory_get) Recupera un valor; falla si la clave no existe
Memory Check (memory_check) Comprueba si una clave existe y obtiene valor y TTL

Uso típico

  1. Guardar datos para reutilización: Almacenar un valor calculado o recibido para usarlo más adelante en la misma automatización o en otras.
  2. Caché con expiración: Usar ttl para datos temporales (por ejemplo, tokens, sesiones).
  3. Compartir entre ejecuciones: Los valores en Redis persisten entre ejecuciones de automatizaciones.

Flujo de ejemplo

[Trigger] → [Memory Set (key: "token", value: {{http_response.body}}, ttl: "7200")] → [Siguiente nodo]

Patrón caché: Set + Check + Get

[Memory Check (key: "cache_key")]
    ├─ not_in_memory → [Calcular valor] → [Memory Set] → [Usar valor]
    └─ in_memory     → [Memory Get o usar output de Check]

Estructura interna (Referencia para desarrolladores)

El nodo se registra en pkg/nodelinker/node_linker.go:

"memory_set": memorynodes.NewMemorySetAutomationNode,
type MemorySetNode struct {
    Key   string
    Value string
    TTL   time.Duration // TTL en segundos, 0 = sin expiración
}

type MemorySetAutomationNode struct {
    automation.AutomationNode
    MemorySetNode MemorySetNode
    logger        *zap.SugaredLogger
}