SuperAPI AI 工具集

nestjs-caching

通用与其它

查看项目

更新于 10-15 22:13

技能介绍

用途:在 NestJS 项目中实现多级缓存、缓存失效模式与缓存击穿(stampede)保护,属于 P1 高优先级规范。

主要能力:

  1. 分层缓存:高流量读接口使用多级缓存。L1 为本地内存(Node.js 堆,无网络、极快),配置或静态数据可用 lru-cache;L2 为分布式 Redis,跨 Pod 共享。推荐 Stale-While-Revalidate 模式,避免缓存未命中时的延迟尖峰。
  2. NestJS 实现:使用 cache-manager 搭配 cache-manager-redis-yet(V4 稳定性优于 cache-manager-redis-store)。简单 GET 响应可用 @UseInterceptors(CacheInterceptor)。注意默认 key 为 URL,需保证查询参数顺序一致或使用自定义 key 生成器。
  3. 击穿保护:为 TTL 添加随机抖动,防止多 key 同时过期;使用锁机制,由一个进程重算,其余等待或返回旧数据。
  4. Redis 数据结构:Hash(HSET)存对象并支持部分更新;Set(SADD)做唯一集合与 O(1) 成员判断;Sorted Set(ZADD)用于优先队列、排行榜、限流窗口。
  5. 失效模式:用 Set 对缓存 key 分组打标签,避免生产环境使用 O(N) 的 KEYS。创建时 SADD post:1:tags cache:post:1;失效时从 Set 取标签再 DEL 分组 key。也可监听领域事件(如 UserUpdated)异步触发失效。

限制与反模式:生产环境禁用 KEYS,改用基于 SET 的标签分组;分组缓存不要用固定 TTL,需加抖动(约 ±10s);多 Pod 场景不要用 MemoryStorage,须用 Redis 存储,因为内存缓存不跨 Pod 共享。

资料未提供具体安装命令、完整代码示例与版本细节。