更新记录

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(免费插件,可直接用于商业项目)
  • 源码授权版:提供完整源码与长期更新支持

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议

暂无用户评论。