小丑鼠

JokyMouse 开发者文档

小丑鼠 Latest

jokymouse.storage API

jokymouse.storage 模块通过 require("jokymouse.storage") 加载,提供按脚本隔离的轻量持久化存储能力。

local storage = require("jokymouse.storage")

设计边界

  • 存储空间按脚本隔离,不同脚本之间不能互读。
  • 单脚本总容量上限为 64KB
  • 值仅支持可序列化为 JSON 的 Lua 类型:nilbooleanintegernumberstring 和普通 table。
  • 适合保存进度、游标、冷却时间、去重标记等轻量状态;不适合保存大文本、图片或日志。

可用函数

函数签名说明
capacitystorage.capacity()返回当前脚本可用的总容量上限,固定 65536
sizestorage.size()返回当前脚本已占用的存储字节数
getstorage.get(key, default?)读取指定 key,不存在时返回 defaultnil
setstorage.set(key, value)写入指定 key;传入 nil 等价于删除
removestorage.remove(key)删除指定 key,返回是否真的存在
clearstorage.clear()清空当前脚本全部存储,返回是否删除了已有文件
keysstorage.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_pagedaily_done_attask_cursor
  • 大对象拆成少量固定 key,不要把整段运行日志塞进去。
  • 如果某个状态只在单次运行中有效,就不要写进 storage。
  • 对可重建的数据优先重算,storage 只保存真正需要跨次运行保留的状态。