Cache 缓存
NocoBase 的 Cache 模块基于 node-cache-manager 封装,为插件开发提供缓存功能。内置了两种缓存类型:
- memory——基于 lru-cache 的内存缓存,由 node-cache-manager 默认提供
- redis——基于 node-cache-manager-redis-yet 的 Redis 缓存
更多缓存类型可以通过 API 扩展注册。
基本用法
app.cache
app.cache 是应用级别的默认缓存实例,可以直接使用。
ctx.cache
在中间件或资源操作 中,可以通过 ctx.cache 访问缓存。
创建自定义缓存
如果需要创建独立的缓存实例(比如不同的命名空间或配置),可以使用 app.cacheManager.createCache() 方法。
createCache 参数说明
获取已创建的缓存
缓存的基本方法
Cache 实例提供了常用的缓存操作方法,大部分继承自 node-cache-manager。
get / set
del / reset
wrap
wrap() 会先尝试从缓存获取数据,如果缓存未命中,则执行回调函数并将结果存入缓存。
批量操作
keys / ttl
高级用法
wrapWithCondition
wrapWithCondition() 类似于 wrap(),不过可以通过条件决定是否使用缓存。
对象缓存操作
当缓存的内容是对象时,可以使用以下方法直接操作对象的属性,而无需获取整个对象。
注册自定义 Store
如果需要使用其他缓存类型(比如 Memcached、MongoDB 等),可以通过 app.cacheManager.registerStore() 注册。
注意事项
- 内存缓存限制:使用 memory store 时,注意设置合理的
max参数,避免内存溢出。 - 缓存失效策略:更新数据时记得清除相关缓存,避免脏数据。
- Key 命名规范:建议使用有意义的命名空间和前缀,如
module:resource:id。 - TTL 设置:根据数据更新频率合理设置 TTL,平衡性能和一致性。
- Redis 连接:使用 Redis 时,确保在生产环境中正确配置连接参数和密码。
相关链接
- Context 请求上下文 — 在中间件和 Action 中通过
ctx.cache访问缓存 - Plugin 插件 — 在插件中创建和管理自定义缓存实例
- 服务端开发概述 — 服务端整体架构与缓存模块的位置
- Middleware 中间件 — 在中间件中结合缓存处理请求逻辑
- Database 数据库操作 — 缓存常与数据库查询配合使用以提升性能

