跳到主要内容

Runtime Memory(运行时记忆)

在一个带按条目寿命的键值仓库里记住、忘记、清空或计数条目。

Variable 回答"此次运行此刻什么为真",Runtime Memory 回答*"这东西我处理过了吗?多久之前?"*

用途

在你选定的作用域里,以命名记忆存多个条目、各带自己的 TTL——从运行本地到跨全部实例共享。

何时用

  • 冷却守卫:"15 分钟内别再碰这个目标"。
  • 记录本会话已处理的东西。
  • 在实例间协调一份已认领条目清单。
  • 数你处理了多少东西。

何时不用

  • 本次运行里的单个值——用 Variable
  • 永不过期的设备事实——用按实例变量。
  • 给 Sub Flow 传参——用它的输入映射。

前提

一个记忆名称和一个操作forget 另需一个 key。

如何运行

节点在所选作用域里对命名记忆执行一个操作。每种操作路由单个 Success——端口是静态的,不随操作变。

条目按绝对时间过期,所以写入 900 秒 TTL 的条目重启后仍过期。什么都不用清理。

设置

设置类型范围备注
Operation选择rememberforgetclearcount必填
Memorystring1–100 字符必填。 仓库名
Scope选择runsessionpersistshared它住在哪
Keystring≤ 500 字符forget 必填。 常绑 {{变量}}
Valuestring≤ 2000 字符要存的简单值
Fields列表≤ 20 项结构化值:Memory Match 可引用的命名字段
TTL secondsinteger1–31536000(1 年)条目活多久
Count variable标识符≤ 100 字符count 把结果写到哪

四种作用域

作用域活过运行结束活过重启跨实例共享
run
session——一次应用启动否——每实例私有
persist否——每实例私有
shared
shared 是真共享

其余作用域按实例给条目做命名空间,实例 A 永远读不到、盖不掉 B 的记忆。shared 是跨实例协调的唯一刻意开关——十个实例写同一键会互相覆盖。凡按设备的用 persist

结构化字段

不用一个不透明的值,存命名字段

字段
x_coordinate{{current_x}}
y_coordinate{{current_y}}

然后 Memory Match 可把每个引用为 {{item.x_coordinate}},这使容差匹配成为可能。

空 key 自动生成

无 key 的 remember 生成唯一 key。当条目是列表(你处理过的东西)而非映射(关于特定键的事实)时用它。

端口

端口走它的时机必接
Success操作完成
Fatal配置无效否——永不被走

每种操作路由 Success。没有 Failure 端口。

基础示例

数已存的东西:

  • Operation:count
  • Memory:processed_targets
  • Scope:run
  • Count variable:processed_count

实际示例——冷却守卫

经典模式,也是本节点存在的理由:

条目带 900 秒 TTL,守卫在 15 分钟后自动过期。没有清理步骤、没有重置流程、没有无限膨胀的旧清单。

高级示例——会话范围的工作日志

追踪本次应用启动已完成什么,不活过重启:

  • Operation:remember
  • Memory:completed_today
  • Scope:session
  • Key:{{account_name}}
  • TTL:86400

新启动从空开始;一次启动内,该实例上每个流程见同一日志。

最佳实践

  • TTL 优于手动清理。 自动过期的条目不会泄漏。
  • 冷却守卫默认用 persist——活过重启、仍按设备。
  • shared 留给真正的跨实例协调。
  • 存结构化字段,不存拼接字符串。 按字段匹配稳健得多。
  • TTL 匹配真实冷却。 太短就重处理;太长就跳过该做的工作。
  • Runtime Memory 与 Memory Match 用相同的名称和作用域——不一致是"Memory Match 从不命中"的头号成因。

性能笔记

  • run 作用域在内存里,几乎免费。
  • sessionpersistshared 走 SQLite。快,但是 I/O——别把 remember 放进很紧的内循环。
  • count 扫描存活条目;记忆大就自己维护计数变量。
  • clear 是批量操作——便宜,但销毁该名该作用域下的一切。

内存笔记

  • run 作用域住在执行上下文里,运行终止即释放。
  • session 存于共享数据库、按启动令牌命名空间;应用启动时回收前几次启动的行,不会无限增长。
  • persistshared 行带绝对到期,所以过期条目被回收而非堆积。
  • persist 里一年 TTL 的条目真会留一年。刻意选择。

常见错误

错误后果修复
与 Memory Match 作用域不一致从不命中相同名称和作用域
shared 存按设备状态实例互相覆盖persist
指望 session 活过重启重启后空persist
forget 无 key配置错误forget 需 key
存一个拼接字符串无法容差匹配结构化字段
不设 TTL条目活到清空总设

故障排查

Memory Match 匹配不到我记的。 查两节点用相同记忆名相同作用域,且表达式里字段名与你存的一致。

重启应用后条目消失。 那是 session 作用域。用 persist

两个实例互相跳过工作。 它们共享 shared 作用域的记忆。换 persist

Count 比预期高。 过期条目被惰性回收;count 报存活条目,复查 TTL。

FAQ

最大 TTL? 一年(31,536,000 秒)。

应用关闭时条目会过期吗? 会——到期按绝对时间,不是倒计时。

这个流程写、那个流程读吗? 可以,在同一作用域和实例内(shared 则任何实例)。

一条最多几个字段? 20。

相关节点

相关页面