RemixCache技能Skill remix-cache

Remix Cache 是一个为 Remix 应用程序设计的类型安全、基于 Redis 的缓存库,支持 SSE 实时失效、过期-同时-再验证、模式匹配和自动 React 再验证。它适用于需要在 Remix 应用中实现缓存策略、处理缓存失效、进行实时数据同步的场景。

前端开发 0 次安装 0 次浏览 更新于 3/3/2026

Remix Cache 技能

专家指导如何使用 remix-cache,这是一个为 Remix 应用程序准备的生产就绪的缓存库,具有基于 SSE 的实时失效、过期-同时-再验证、模式匹配和自动 React 再验证功能。当您在 Remix 应用程序中处理缓存、Redis 后端缓存策略、缓存失效(通过键、标签或模式)、实时缓存同步、过期-同时-再验证模式、类型安全的缓存定义、React 钩子自动再验证或性能优化时,可以使用这项技能。

何时使用这项技能

当用户询问以下内容时,使用这项技能:

  • Remix 应用程序中实现缓存
  • Redis 后端缓存策略
  • 缓存失效(通过键、标签或模式)
  • 基于 SSE 的实时缓存同步
  • 过期-同时-再验证模式
  • 类型安全的缓存定义
  • React 钩子自动再验证
  • 缓存性能优化
  • 服务器与无服务器缓存模式
  • 缓存故障的断路器模式

快速参考

基本设置

// app/cache.server.ts
import { createCache } from 'remix-cache/server'

export const cache = createCache({
  redis: { host: process.env.REDIS_HOST, port: 6379 },
  prefix: 'myapp',
})

export const userCache = cache.define({
  name: 'user',
  key: (userId: string) => userId,
  fetch: async (userId: string) => db.user.findUnique({ where: { id: userId } }),
  ttl: 300,
})

在加载器中使用

export async function loader({ params }: LoaderFunctionArgs) {
  const user = await userCache.get(params.userId)
  return json({ user })
}

失效

// 通过键
await cache.invalidate({ key: 'myapp:user:123' })

// 通过标签
await cache.invalidateByTag('product')

// 通过模式
await cache.invalidateByPattern('user:*')

实时 React 再验证

// app/root.tsx
<CacheProvider endpoint="/api/cache-events">
  <Outlet />
</CacheProvider>

// 组件
useCache({ tags: ['user'], debounce: 200 })

详细文档

对于特定主题的全面指导,请参阅:

关键能力

1. 类型安全的缓存定义

完美的 TypeScript 推断缓存键和值。见 API_REFERENCE.md

2. 高级 TTL 策略

  • 过期-同时-再验证:在获取新鲜数据的同时提供过时数据
  • 滑动窗口:每次访问时重置 TTL
  • 条件 TTL:基于数据的动态 TTL 见 PATTERNS.md

3. 多级失效

  • 通过键:使特定条目失效
  • 通过标签:使一组相关条目失效
  • 通过模式:使用通配符模式使条目失效
  • 级联:自动依赖失效 见 API_REFERENCE.md

4. 实时同步

  • SSE 端点:将失效事件流式传输到客户端
  • React 钩子:在缓存更改时自动再验证
  • 过滤:仅针对特定键/标签/模式再验证 见 REACT_INTEGRATION.md

5. 弹性特性

  • 断路器:当 Redis 失败时优雅降级
  • 请求去重:防止缓存踩踏
  • 错误事件:监控和跟踪故障 见 PATTERNS.md

6. 部署灵活性

  • 服务器模式:两层缓存(本地 LRU + Redis)
  • 无服务器模式:仅 Redis,带版本控制键 见 API_REFERENCE.md

此存储库中的文件结构

remix-cache 库的组织如下:

src/
├── server/           # 服务器端缓存实现
│   ├── cache.ts      # 主缓存类
│   ├── definition.ts # 缓存定义实现
│   ├── sse-handler.ts # SSE 端点生成器
│   ├── local-cache.ts # 内存 LRU 缓存
│   ├── circuit-breaker.ts # 断路器模式
│   └── deduplicator.ts # 请求去重
├── react/            # React 集成
│   ├── provider.tsx  # CacheProvider 组件
│   ├── use-cache.ts  # useCache 钩子
│   └── context.tsx   # React 上下文
├── types/            # TypeScript 类型定义
│   ├── cache.ts
│   ├── definition.ts
│   └── events.ts
└── utils/            # 公用函数
    ├── key-builder.ts     # 缓存键生成
    ├── pattern-match.ts   # 通配符模式匹配
    └── env-detect.ts      # 环境检测

常见工作流

设置新缓存

  1. 阅读 GETTING_STARTED.md 了解基本设置
  2. app/cache.server.ts 中创建缓存实例
  3. 为您的数据类型定义缓存定义
  4. 在加载器/操作中使用
  5. 设置 SSE 端点以实现实时失效(见 REACT_INTEGRATION.md
  6. 在需要自动再验证的组件中添加 React 钩子

实施缓存失效

  1. 确定失效策略(键/标签/模式)
  2. 如果需要,向缓存定义添加标签
  3. 在操作中调用失效方法
  4. 验证是否触发了失效事件
  5. 测试 React 组件是否正确再验证

调试缓存问题

  1. 查看 TROUBLESHOOTING.md 了解常见问题
  2. 启用事件侦听器以监控缓存行为
  3. 验证 Redis 连接和配置
  4. 检查断路器状态
  5. 在浏览器 DevTools 中检查 SSE 连接

编写测试

TESTING.md

  • 单元测试缓存定义
  • 与 Redis 的集成测试
  • 测试中的模拟缓存
  • 测试失效逻辑
  • 测试带有缓存的 React 组件

环境变量

REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your-password
CACHE_PREFIX=myapp
CACHE_DEFAULT_TTL=300
NODE_ENV=production

实施说明

在帮助用户实施 remix-cache 时:

  1. 始终确保类型安全:库提供完美的 TypeScript 推断
  2. 考虑部署模式:询问是否为无服务器或基于服务器
  3. 计划失效策略:标签比键更灵活
  4. 设置适当的 TTL:在新鲜度和性能之间取得平衡
  5. 监控错误:始终设置错误事件侦听器
  6. 彻底测试:缓存错误可能很微妙,见 TESTING.md
  7. 关闭连接:特别是在测试中很重要

获取帮助

对于特定主题:

版本

这项技能涵盖了 remix-cache v0.1.0,完整实现了第 1-5 阶段:

  • ✅ 核心缓存与 Redis 后端
  • ✅ 类型安全的缓存定义
  • ✅ 过期-同时-再验证
  • ✅ 滑动窗口 TTL
  • ✅ 模式和标签基础失效
  • ✅ 断路器模式
  • ✅ 请求去重
  • ✅ 服务器/无服务器模式
  • ✅ SSE 实时失效
  • ✅ React 钩子自动再验证