jokymouse.storage API
jokymouse.storage 模块通过 require("jokymouse.storage") 加载,提供按脚本隔离的轻量持久化存储能力。
local storage = require("jokymouse.storage") 设计边界
- 存储空间按脚本隔离,不同脚本之间不能互读。
- 单脚本总容量上限为
64KB。 - 值仅支持可序列化为 JSON 的 Lua 类型:
nil、boolean、integer、number、string和普通 table。 - 适合保存进度、游标、冷却时间、去重标记等轻量状态;不适合保存大文本、图片或日志。
可用函数
| 函数 | 签名 | 说明 |
|---|---|---|
| capacity | storage.capacity() | 返回当前脚本可用的总容量上限,固定 65536 |
| size | storage.size() | 返回当前脚本已占用的存储字节数 |
| get | storage.get(key, default?) | 读取指定 key,不存在时返回 default 或 nil |
| set | storage.set(key, value) | 写入指定 key;传入 nil 等价于删除 |
| remove | storage.remove(key) | 删除指定 key,返回是否真的存在 |
| clear | storage.clear() | 清空当前脚本全部存储,返回是否删除了已有文件 |
| keys | storage.keys() | 返回当前脚本已保存的全部 key(数组) |
示例:记录上次处理到的页码
local jm = require("jokymouse")
local storage = require("jokymouse.storage")
local page = storage.get("last_page", 1)
while page <= 10 do
jm.ensure_running()
print("当前处理页码", page)
-- 你的自动化逻辑...
storage.set("last_page", page)
page = page + 1
end
storage.remove("last_page") 示例:冷却时间判断
local system = require("jokymouse.system")
local storage = require("jokymouse.storage")
local now = system.time()
local last = storage.get("last_sign_at", 0)
if now - last < 6 * 60 * 60 * 1000 then
print("还没到下一次执行时间")
return
end
storage.set("last_sign_at", now) 关于容量限制
storage.set(...) 后,如果当前脚本的总存储体积超过 64KB,会直接抛出运行时错误,写入不会成功。
local storage = require("jokymouse.storage")
print("已用", storage.size(), "/", storage.capacity()) local storage = require("jokymouse.storage")
local ok, err = pcall(function()
storage.set("huge_payload", string.rep("x", 70 * 1024))
end)
if not ok then
print("写入失败:" .. tostring(err))
end 推荐实践
- key 尽量短而稳定,例如
last_page、daily_done_at、task_cursor。 - 大对象拆成少量固定 key,不要把整段运行日志塞进去。
- 如果某个状态只在单次运行中有效,就不要写进 storage。
- 对可重建的数据优先重算,storage 只保存真正需要跨次运行保留的状态。