一键导入
caching-strategy
快取策略與多層快取設計技能,協助開發者實作 L1 Memory + L2 Redis 分層快取,包含 TTL 管理、版本控制與失效策略。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
快取策略與多層快取設計技能,協助開發者實作 L1 Memory + L2 Redis 分層快取,包含 TTL 管理、版本控制與失效策略。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
API 開發流程引導技能,協助開發者選擇合適的開發流程(API First 或 Code First),並提供 OpenAPI 規格管理、程式碼產生等自動化支援。
BDD 測試實作技能,協助開發者使用 Reqnroll 撰寫行為驅動開發測試,包含 Gherkin 語法、測試步驟實作與 Docker 測試環境設定。
EF Core 操作與最佳化技能,協助開發者正確使用 Entity Framework Core,包含 DbContextFactory 模式、查詢最佳化、Migration 管理與反向工程。
專案初始化與配置技能,負責引導使用者完成新專案的初始化、配置設定、GitHub 範本套用與專案狀態檢測。
Repository 設計指導技能,協助開發者根據業務需求選擇最合適的 Repository 設計策略(資料表導向 vs 需求導向 vs 混合模式)。
GitHub Copilot Skill 與 Agent 設計指導技能,協助開發者設計與實作高品質的 Skill 和 Agent,包含架構設計、最佳實踐、工作流程規劃與常見反模式識別。
| name | caching-strategy |
| description | 快取策略與多層快取設計技能,協助開發者實作 L1 Memory + L2 Redis 分層快取,包含 TTL 管理、版本控制與失效策略。 |
本 SKILL 須搭配閱讀:
多層快取設計與實作技能,協助開發者設計高效快取架構,支援記憶體快取(L1)與 Redis(L2)分層備援。
讀取流程:
1. 檢查 L1 快取
├─ 命中 → 直接返回
└─ 未命中 ↓
2. 檢查 L2 快取 (Redis)
├─ 命中 → 寫入 L1、返回
└─ 未命中 ↓
3. 從資料庫讀取
└─ 寫入 L1 + L2、返回
格式: {feature}:{operation}:{parameters} (冒號分隔)
範例:
members:page:0:10 # 會員列表分頁 0-10
member:email:test@example.com # 特定郵件會員
order:detail:12345 # 訂單詳情 ID=12345
product:list:category:electronics # 分類商品列表
| 資料類型 | TTL | 原因 |
|---|---|---|
| 會員資訊 | 30-60 分鐘 | 中等變更頻率 |
| 產品目錄 | 1-4 小時 | 低變更頻率 |
| 設定數據 | 24 小時 | 很少變更 |
| 會話數據 | 15-30 分鐘 | 高安全要求 |
| 使用者權限 | 5-10 分鐘 | 中等安全要求 |
| 訂單狀態 | 5 分鐘 | 實時性要求高 |
資料修改時立即清除相關快取:
// 例: 修改會員資訊時清除快取
public async Task UpdateMemberAsync(Member member)
{
await memberRepo.UpdateAsync(member);
await cache.RemoveAsync($"member:email:{member.Email}");
await cache.RemoveAsync("members:list:*"); // 批次清除
}
// 使用 Redis tag 支援批次清除
await cache.SetAsync(
key: "member:123",
value: memberData,
tags: new[] { "members", "user-123" });
// 清除所有會員相關快取
await cache.RemoveByTagAsync("members");
// 版本前綴策略:快取鍵包含版本號
const string VERSION = "v2";
var cacheKey = $"{VERSION}:member:email:test@example.com";
// 版本更新時無需主動清除,新版本鍵與舊版本共存
// 可配置最舊版本自動過期
實作快取時,應檢查:
是否應該快取此數據?
選擇快取層級
TTL 設定是否合理
失效策略選擇
快取雪崩防護
// 不要這樣做 — 快取太多數據導致記憶體溢出
var users = await db.Users.ToListAsync();
await cache.SetAsync("all-users", users); // ❌ 超大資料集
// 不要這樣做 — 資料遺失風險高
await cache.SetAsync("config", data, TimeSpan.FromDays(30)); // ❌ 30 天无法更新
// 不要這樣做 — 安全風險
await cache.SetAsync("user-password", pwd); // ❌ 不應快取
await cache.SetAsync("api-token", token); // ❌ 不應快取
開發者應參考專案內的實際實作代碼:
多層快取實作:
node .claude/skills/shared/FileResolver.js get-content \
src/JobBank1111.Infrastructure/Caching/MultiLayerCacheService.cs
Redis 配置:
node .claude/skills/shared/FileResolver.js get-content \
src/appsettings.json