更新记录
1.0.0(2026-11-04) 下载此版本
1.0.0\n- 首发版本\n- 命名空间隔离,避免多模块 key 冲突\n- 支持 TTL 过期与 LRU 淘汰策略\n- 提供容量统计与命中率统计\n- 内置 memo 记忆化,减少重复计算
平台兼容性
pk-storage 缓存套件
本地缓存封装:命名空间隔离、过期 KV、LRU 淘汰、容量统计、memo 记忆化。纯 JS 实现,零依赖,uni-app / H5 / 各端小程序通用。
特性
- 命名空间隔离:多模块同名 key 互不覆盖,清空间不影响其它数据
- 惰性过期:读时判断 + 写时顺带清扫,不依赖定时器,对保活零负担
- LRU 淘汰 + 容量统计:容量可控,App 启动一键清过期
- memo / memoSync 记忆化:昂贵计算只跑一次,之后命中缓存
- 健壮兜底:序列化带类型标签,循环引用/不支持类型安全降级,解析失败绝不崩调用方
- onChange 事件:数据写/删实时感知
安装与引入
通过 uni_modules 导入后,按如下方式引入:
import storage from '@/uni_modules/pk-storage/js_sdk/index.js';
5 分钟接入
import storage from '@/uni_modules/pk-storage/js_sdk/index.js';
storage.init({ namespace: 'myapp' }); // 全局默认命名空间
storage.set('user', { name: '张三' }); // 永久
storage.set('otp', '123456', { ttl: 5 * 60 * 1000 }); // 5 分钟过期
const u = storage.get('user'); // { name: '张三' }
const otp = storage.get('otp', '已过期'); // 过期返回默认值
// 命名空间隔离:多模块同名 key 互不覆盖
storage.set('token', 'A', { namespace: 'order' });
storage.set('token', 'B', { namespace: 'pay' });
API 全表
| 方法 | 签名 | 说明 |
|---|---|---|
init |
init({ namespace }) |
设全局默认命名空间(默认 'app') |
set |
set(key, value, { ttl?, namespace? }) |
写入。ttl 毫秒,0/缺省永不过期。value 不支持 undefined/函数(返回 E-ST-02) |
get |
get(key, defaultValue?, opts?) |
读取。过期/损坏/不存在返回 defaultValue,绝不抛错;过期条目顺手清除 |
has |
has(key, opts?) |
存在且未过期 → true |
remove |
remove(key, opts?) |
删除 |
keys |
keys(opts?) |
当前命名空间全部逻辑 key |
mset |
mset({ k1: v1, k2: { value, ttl } }, opts?) |
批量写,返回逐条结果 |
mget |
mget([keys], defaultValue?, opts?) |
批量读 → { key: value } |
info |
info(opts?) |
容量统计 { totalChars, count, namespaces: { ns: { count, chars } } } |
clearExpired |
clearExpired(opts?) |
清扫全部过期条目 → { removed }(建议 App 启动时调一次) |
evict |
evict(maxKeys, opts?) |
LRU 淘汰到 maxKeys 条(过期优先,其次最旧)→ { removed: [key] } |
clear |
clear({ namespace }) |
清空命名空间;传 { namespace: '*' } 清全部本插件条目(不动其他插件的数据) |
onChange |
onChange(fn) |
写/删事件订阅 → 返回退订函数。事件 { type:'set'|'remove', namespace, key } |
offChange |
offChange(fn) |
退订 |
memo |
await memo(key, asyncFn, opts?) |
异步记忆化:命中返回 {cached:true, value},未命中执行 fn 并入缓存 |
memoSync |
memoSync(key, syncFn, opts?) |
同步记忆化 |
key 规则
- 物理 key 形如
pkst:<ns>:<key>,与 uni 原生 storage 隔离共存 - 逻辑 key 不允许包含
:(E-ST-01),命名空间为任意非空字符串
错误码
| 码 | 含义 |
|---|---|
| E-ST-01 | key 非法(空/含冒号) |
| E-ST-02 | value 类型不支持(undefined/函数) |
| E-ST-03 | ttl 非法 |
| E-ST-10 | 底层写入失败 |
| E-ST-11 | 读取异常(返回默认值兜底) |
FAQ
Q:会影响 uni.setStorage 存的其它数据吗?
不会。只读写 pkst: 前缀的条目,clear('*') 也只清自己的。
Q:过期是靠定时器吗?后台会耗电吗? 不靠定时器。读时惰性判断 + 任意写操作时顺带清扫,对保活零负担。
Q:数据损坏会白屏吗? 不会。序列化带类型标签,循环引用降级为字符串;解析失败返回默认值并上报。
兼容性与许可
- 运行平台:Android / iOS / H5 / 微信小程序等各端通用(纯 JS,无原生依赖)
- 支持的 uni-app 版本:uni-app(Vue2 / Vue3)
- 许可协议:MIT(免费插件,可直接用于商业项目)
- 源码授权版:提供完整源码与长期更新支持

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 0
赞赏 0
下载 12742089
赞赏 1959
赞赏
京公网安备:11010802035340号