Documentación: Nodo Memory Check¶
Descripción General¶
El nodo Memory Check comprueba si una clave existe en Redis y, en caso afirmativo, obtiene su valor y TTL (tiempo restante de vida). A diferencia de Memory Get, este nodo no falla cuando la clave no existe: utiliza conectores condicionales para bifurcar el flujo según el resultado.
Tipo de nodo: memory_check
Clase: action
Paquete: pkg/automationnode/memorynodes
¿Cuándo usar este nodo?¶
Use este nodo cuando necesite:
- Comprobar si una clave existe antes de leer (evitar errores cuando la clave puede no existir)
- Implementar lógica de caché condicional: si el valor existe, usarlo; si no, calcularlo y guardarlo con Memory Set
- Usar el campo
ttlpara saber cuánto tiempo queda hasta que expire la clave - Ramificar el flujo según si un valor está en memoria
Configuración del Nodo¶

El nodo requiere un único parámetro de entrada: la clave a consultar en Redis. Puede configurarlo en la vista Form o en el JSON Editor.
Estructura JSON (Parámetros de entrada)¶
{
"key": "key-name"
}
Campos Requeridos¶
| Campo | Tipo | Descripción |
|---|---|---|
key |
string | La clave a consultar en Redis |
La clave puede definirse mediante el sistema de templates del motor, por ejemplo: {{nodo_anterior.output_field}}.
Ejemplo de configuración¶
{
"key": "mi_variable_cache"
}
Salidas (Output)¶
El contenido del output depende de si la clave existe o no:
Cuando la clave existe (conector in_memory)¶
| Campo | Tipo | Descripción |
|---|---|---|
value |
string | El valor almacenado en Redis para la clave |
ttl |
string | Tiempo restante de vida en segundos ("-1" si no expira) |
Cuando la clave no existe (conector not_in_memory)¶
El output es un objeto vacío (sin value ni ttl).
Ejemplo de salida (clave existente)¶
{
"value": "contenido_almacenado",
"ttl": "3600"
}
Puede referenciar esta salida en nodos posteriores mediante expresiones de template, por ejemplo {{memory_check.value}}.
Conectores (Connectors)¶
| Conector | Descripción |
|---|---|
in_memory |
La clave existe en Redis; el output incluye value y ttl |
not_in_memory |
La clave no existe, o hubo un error al consultar Redis |
Estos conectores permiten ramificar el flujo: por ejemplo, conectar in_memory a un nodo que use el valor, y not_in_memory a uno que lo almacene o realice otra acción alternativa.
Validación¶
keydebe ser un string no vacío.- Si
keyno es un string o está vacío, la validación falla y el nodo no se ejecuta.
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 ocurre un error al consultar Redis (por ejemplo, conexión fallida):
- El nodo retorna el error al motor.
- El output contiene:
value: "",exists: false,ttl: "0". - El conector emitido es
not_in_memory.
El GetFallbackConnector es continue, aunque en la implementación actual los errores se manejan emitiendo not_in_memory en el resultado.
Nodos relacionados¶
| Nodo | Descripción |
|---|---|
Memory Set (memory_set) |
Almacena un valor en Redis con clave, valor y TTL opcional |
Memory Get (memory_get) |
Recupera un valor; falla si la clave no existe |
Uso típico¶
- Comprobar antes de leer: Evitar errores cuando la clave puede no existir. En lugar de usar Memory Get directamente, usar Memory Check y ramificar según
in_memory/not_in_memory. - Caché condicional: Verificar si un valor está en caché; si existe, usarlo; si no, calcularlo y guardarlo con Memory Set.
- Lógica de expiración: Usar el campo
ttlpara saber cuánto tiempo queda hasta que expire la clave.
Flujo de ejemplo¶
[Trigger] → [Memory Check (key: "session_data")]
├─ in_memory → [Usar valor en siguiente nodo]
└─ not_in_memory → [Memory Set] → [Continuar flujo]
Ejemplo con lógica adicional¶
[Memory Check] ─in_memory──→ [Nodo A: usar value]
[Memory Check] ─not_in_memory─→ [Memory Set] → [Nodo B: valor recién guardado]
Estructura interna (Referencia para desarrolladores)¶
El nodo se registra en pkg/nodelinker/node_linker.go:
"memory_check": memorynodes.NewMemoryCheckAutomationNode,
type MemoryCheckNode struct {
Key string
}
type MemoryCheckAutomationNode struct {
automation.AutomationNode
MemoryCheckNode MemoryCheckNode
logger *zap.SugaredLogger
}