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。