API 参考

缓存(nb.cache / cacheManage)

支持 PostgreSQL(默认)与 Redis 两种模式,通过 nb.cache 暴露给业务层使用;也可用工厂方法按需创建实例。


🧭 用法概览

// 仅服务器端使用缓存:从 "@/lib/nb" 引入
import nb from '@/lib/nb'

await nb.cache.set('demo:key', { foo: 'bar' }, 60) // TTL 60 秒
const value = await nb.cache.get('demo:key')

// setnx / incr / decr 与 Redis 接口保持一致
await nb.cache.setnx('demo:key', 'v1')
await nb.cache.incr('demo:counter', 120)
await nb.cache.decrby('demo:counter', 2)
await nb.cache.expire('demo:key', 30)

导入区分:@/lib/function 仅包含工具函数(客户端/服务端通用,不含缓存);@/lib/nb 才包含 cache / cacheManage,且应只在服务端代码中使用。


⚙️ 配置

默认模式取自环境变量:

# db | redis
CACHE_MODE=db

# Redis 仅在 CACHE_MODE=redis 时生效
REDIS_URL=
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_USERNAME=
REDIS_PASSWORD=
REDIS_DB=0
REDIS_TLS=false

提醒:修改 schema 后别忘执行 bunx prisma generate / bunx prisma db push 以创建 cache_entries 表。


🧩 API 能力

  • set(key, value, ttlSeconds?):写入并可选 TTL;
  • get(key):读取并自动 JSON 解析;
  • setnx(key, value, ttlSeconds?):仅当 key 不存在时写入;
  • incr(key, ttlSeconds?) / decrby(key, step, ttlSeconds?):数值自增/自减;
  • expire(key, ttlSeconds):更新过期时间。

PostgreSQL 模式使用数据表存储,Redis 模式直连 Redis;接口形态保持一致。


🏭 动态工厂(cacheManage)

如需按场景切换模式或自定义连接参数,可使用工厂方法:

import { cacheManage } from '@/lib/cache/cache-manager'

const redisCache = cacheManage({
  mode: 'redis',
  redis: { host: 'localhost', port: 6379 },
})

await redisCache.set('foo', 'bar')
const foo = await redisCache.get('foo')

传入 mode: 'db' | 'redis';Redis 额外接受 host/port/username/password/db/tls 等连接参数。未指定时仍遵循环境变量配置。


✅ 使用建议

  • 仅服务端调用:避免在客户端/Edge 侧直接引用缓存实例;
  • 键名前缀:按业务模块加前缀如 user:session:,减少冲突;
  • TTL 策略:读多写少的列表/详情可加短 TTL,敏感数据请命中后立即失效或禁用缓存;
  • 模式切换:本地/CI 可用默认 db 模式;生产需要高并发与共享缓存时切换到 Redis。