Runtime Memory (Bộ nhớ tạm)
Nhớ, quên, dọn, hay đếm các mục trong kho key/value có vòng đời theo từng mục.
Nếu Variable trả lời "điều gì đúng ngay lúc này trong lần chạy này", Runtime Memory trả lời "tôi đã xử lý thứ này chưa, gần đây cỡ nào?"
Mục đích
Lưu nhiều mục dưới một bộ nhớ có tên, mỗi mục TTL riêng, trong scope bạn chọn — từ cục bộ lần chạy đến chia sẻ mọi instance.
Khi nào dùng
- Chốt chặn cooldown: "đừng đụng mục tiêu này thêm 15 phút".
- Ghi thứ đã xử lý trong phiên này.
- Phối hợp danh sách mục-đã-nhận giữa các instance.
- Đếm số thứ đã xử lý.
Khi nào không dùng
- Một giá trị trong lần chạy này — dùng Variable.
- Sự thật thiết bị không bao giờ hết hạn — dùng biến theo-instance.
- Truyền đối số cho Sub Flow — dùng input mapping của nó.
Điều kiện
Một tên bộ nhớ và một thao tác. forget thêm yêu cầu key.
Cách nó chạy
Node thực hiện một thao tác trên bộ nhớ có tên trong scope đã chọn. Mọi thao tác rẽ một Success duy nhất — port tĩnh, không theo thao tác.
Mục hết hạn theo thời gian tuyệt đối, nên mục ghi TTL 900 giây vẫn hết hạn sau khởi động lại app. Không gì phải dọn.
Thiết lập
| Thiết lập | Kiểu | Khoảng | Ghi chú |
|---|---|---|---|
| Operation | lựa chọn | remember, forget, clear, count | Bắt buộc |
| Memory | string | 1–100 ký tự | Bắt buộc. Tên kho |
| Scope | lựa chọn | run, session, persist, shared | Nó sống ở đâu |
| Key | string | ≤ 500 ký tự | Bắt buộc cho forget. Thường gắn {{biến}} |
| Value | string | ≤ 2000 ký tự | Giá trị đơn để lưu |
| Fields | danh sách | ≤ 20 mục | Giá trị có cấu trúc: trường tên Memory Match tham chiếu được |
| TTL seconds | integer | 1–31536000 (1 năm) | Mục sống bao lâu |
| Count variable | định danh | ≤ 100 ký tự | count ghi kết quả vào đâu |
Bốn scope
| Scope | Sống qua kết thúc lần chạy | Sống qua khởi động lại | Chia sẻ giữa instance |
|---|---|---|---|
run | Không | Không | Không |
session | Có | Không — một lần mở app | Không — riêng từng instance |
persist | Có | Có | Không — riêng từng instance |
shared | Có | Có | Có |
shared chia sẻ thật sựMọi scope khác đặt namespace mục theo instance, nên instance A không bao giờ đọc/đè bộ nhớ của B. shared là opt-in duy nhất cho phối hợp liên-instance — và mười instance ghi cùng khóa sẽ đè nhau. Thứ theo thiết bị, dùng persist.
Trường có cấu trúc
Thay vì một giá trị mờ, lưu các trường có tên:
| Trường | Giá trị |
|---|---|
x_coordinate | {{current_x}} |
y_coordinate | {{current_y}} |
Memory Match tham chiếu từng trường qua {{item.x_coordinate}}, thứ làm so khớp dung sai khả thi.
Key trống tự sinh
remember không key sinh key duy nhất. Dùng khi mục là danh sách (thứ đã xử lý) chứ không phải map (sự thật theo khóa cụ thể).
Port
| Port | Đi vào khi | Bắt buộc |
|---|---|---|
| Success | Thao tác hoàn tất | Có |
| Fatal | Cấu hình sai | Không — không bao giờ được đi |
Mọi thao tác rẽ Success. Không có port Failure.
Ví dụ cơ bản
Đếm thứ đã lưu:
- Operation: count
- Memory:
processed_targets - Scope:
run - Count variable:
processed_count
Ví dụ thực tế — chốt chặn cooldown
Khuôn mẫu kinh điển, và lý do node này tồn tại:
Mục mang TTL 900 giây nên chốt chặn tự hết hạn sau 15 ph út. Không bước dọn, không flow reset, không danh sách mốc phình mãi.
Ví dụ nâng cao — nhật ký việc theo phiên
Theo dõi lần mở app này đã hoàn tất gì, không sống qua khởi động lại:
- Operation: remember
- Memory:
completed_today - Scope:
session - Key:
{{account_name}} - TTL:
86400
Mở app mới khởi đầu sạch; trong một lần mở, mọi flow trên instance đó thấy cùng nhật ký.
Best practices
- Ưu tiên TTL hơn dọn tay. Mục tự hết hạn không thể rò rỉ.
- Mặc định dùng
persistcho chốt chặn cooldown — sống qua khởi động lại, vẫn theo thiết bị. - Dành
sharedcho phối hợp liên-instance thật sự. - Lưu trường có cấu trúc, không chuỗi nối. Khớp theo trường bền hơn hẳn.
- TTL khớp cooldown thật. Ngắn quá thì xử lý lại; dài quá thì bỏ việc đáng làm.
- Cùng tên bộ nhớ và scope trên cả Runtime Memory lẫn Memory Match — lệch là nguyên nhân đầu bảng của "Memory Match không bao giờ khớp".
Ghi chú hiệu năng
- Scope
runtrong RAM, gần miễn phí. session,persist,sharedchạy SQLite. Nhanh nhưng là I/O — tránhremembertrong vòng trong siết chặt.countquét mục sống; bộ nhớ lớn thì tự giữ biến đếm.clearlà thao tác khối — rẻ, nhưng hủy mọi thứ dưới tên đó trong scope đó.
Ghi chú bộ nhớ
- Scope
runsống trên ngữ cảnh thực thi, giải phóng khi lần chạy kết thúc. sessionlưu CSDL chung dưới token theo lần mở; app thu hồi hàng của các lần mở trước lúc khởi động, không phình vô hạn.- Hàng
persistvàsharedmang thời hạn tuyệt đối, nên mục hết hạn được thu hồi thay vì tích tụ. - Mục TTL một năm trong
persistthật sự ở lại một năm. Chọn có chủ đích.
Lỗi thường gặp
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
| Scope lệch với Memory Match | Không bao giờ khớp | Cùng tên và scope |
Dùng shared cho trạng thái theo máy | Instance đè nhau | persist |
Kỳ vọng session sống qua khởi động lại | Rỗng sau mở lại | persist |
forget không key | Lỗi cấu hình | forget cần key |
| Lưu một chuỗi nối | Không khớp dung sai được | Trường có cấu trúc |
| Không TTL | Mục sống tới khi clear | Luôn đặt |
Khắc phục sự cố
Memory Match không khớp thứ tôi đã nhớ. Kiểm cả hai node dùng cùng tên bộ nhớ và cùng scope, và tên trường trong biểu thức khớp trường đã lưu.
Mục biến mất sau khởi động lại app.
Đó là scope session. Dùng persist.
Hai instance bỏ việc của nhau.
Chúng chia bộ nhớ scope shared. Chuyển persist.
Count cao hơn kỳ vọng.
Mục hết hạn được thu hồi lười; count báo mục sống, kiểm lại TTL.