Chuyển tới nội dung chính

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ậpKiểuKhoảngGhi chú
Operationlựa chọnremember, forget, clear, countBắt buộc
Memorystring1–100 ký tựBắt buộc. Tên kho
Scopelựa chọnrun, session, persist, sharedNó sống ở đâu
Keystring≤ 500 ký tựBắt buộc cho forget. Thường gắn {{biến}}
Valuestring≤ 2000 ký tựGiá trị đơn để lưu
Fieldsdanh sách≤ 20 mụcGiá trị có cấu trúc: trường tên Memory Match tham chiếu được
TTL secondsinteger1–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

ScopeSống qua kết thúc lần chạySống qua khởi động lạiChia sẻ giữa instance
runKhôngKhôngKhông
sessionKhông — một lần mở appKhông — riêng từng instance
persistKhông — riêng từng instance
shared
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ườngGiá 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 khiBắt buộc
SuccessThao tác hoàn tất
FatalCấu hình saiKhô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 persist cho chốt chặn cooldown — sống qua khởi động lại, vẫn theo thiết bị.
  • Dành shared cho 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 run trong RAM, gần miễn phí.
  • session, persist, shared chạy SQLite. Nhanh nhưng là I/O — tránh remember trong vòng trong siết chặt.
  • count quét mục sống; bộ nhớ lớn thì tự giữ biến đếm.
  • clear là thao tác khối — rẻ, nhưng hủy mọi thứ dưới tên đó trong scope đó.

Ghi chú bộ nhớ

  • Scope run sống trên ngữ cảnh thực thi, giải phóng khi lần chạy kết thúc.
  • session lư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 persistshared mang 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 persist thật sự ở lại một năm. Chọn có chủ đích.

Lỗi thường gặp

LỗiHậu quảCách sửa
Scope lệch với Memory MatchKhông bao giờ khớpCùng tên và scope
Dùng shared cho trạng thái theo máyInstance đè nhaupersist
Kỳ vọng session sống qua khởi động lạiRỗng sau mở lạipersist
forget không keyLỗi cấu hìnhforget cần key
Lưu một chuỗi nốiKhông khớp dung sai đượcTrường có cấu trúc
Không TTLMục sống tới khi clearLuô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ớ 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.

FAQ

TTL tối đa? Một năm (31.536.000 giây).

Mục có hết hạn khi app đóng? Có — thời hạn là thời gian tuyệt đối, không phải đếm ngược.

Flow này ghi flow kia đọc được không? Được, trong cùng scope và instance (mọi instance với shared).

Một mục tối đa mấy trường? 20.

Node liên quan

Trang liên quan