caching-strategylisted
Install: claude install-skill afine907/skills
# Caching Strategy — 缓存策略技能
设计系统性缓存方案,解决高并发读取性能问题。
## Goal
设计和实现缓存方案,包含缓存选型、缓存模式、失效策略、缓存穿透/击穿/雪崩防护
## Trigger
- 用户要求"设计缓存方案"、"优化缓存"
- 系统性能瓶颈在数据库查询
- 需要实现分布式缓存
## 缓存选型
| 类型 | 适用场景 | 优势 | 劣势 |
|------|----------|------|------|
| 本地缓存 | 单实例、高频读 | 零网络开销 | 不支持分布式 |
| Redis | 分布式、丰富数据结构 | 高性能、持久化 | 需要额外服务 |
| Memcached | 简单 KV、多线程 | 简单高效 | 功能有限 |
| CDN | 静态资源 | 全球加速 | 仅限静态内容 |
## 缓存模式
### 1. Cache-Aside(旁路缓存)
最常用的模式,应用层控制缓存。
```
读流程:
1. 先查缓存
2. 缓存命中 → 返回
3. 缓存未命中 → 查数据库
4. 写入缓存
5. 返回数据
写流程:
1. 更新数据库
2. 删除缓存(而非更新)
```
```python
async def get_user(user_id: str) -> User:
# 1. 查缓存
cache_key = f"user:{user_id}"
cached = await redis.get(cache_key)
if cached:
return User.parse_raw(cached)
# 2. 查数据库
user = await db.get_user(user_id)
if user is None:
# 缓存空值,防止缓存穿透
await redis.setex(cache_key, 60, "null")
return None
# 3. 写入缓存
await redis.setex(cache_key, 3600, user.json())
return user
async def update_user(user_id: str, data: UserUpdate):
# 1. 更新数据库
await db.update_user(user_id, data)
# 2. 删除缓存
await redis.delete(f"user:{user_id}")
```
### 2. Read-Through / Write-Through
缓存层代理数据库操作。
```
读流程:
1. 查缓存
2. 缓存未命中 → 缓存层自动从 DB 加载
3. 返回数据
写流程:
1. 写入缓存
2. 缓存层自动同步到 DB
```
### 3. Write-Behind(异步写入)
写入只到缓存,异步批量同步到 DB。
```
写流程:
1. 写入缓存(立即返回)
2. 异步批量写入 DB
适用场景:
- 写入量大
- 允许短暂数据不一致
- 如:计数器、