Appearance
Day 29 - 缓存与性能优化
缓存策略
Cache-Aside
go
func GetUser(id int64) (*User, error) {
// 先查缓存
user, err := rdb.Get(ctx, "user:"+strconv.FormatInt(id, 10)).Result()
if err == nil {
return unmarshalUser(user)
}
// 缓存未命中,查数据库
user, err = db.First(&User{ID: id})
if err != nil {
return nil, err
}
// 写入缓存
rdb.Set(ctx, "user:"+strconv.FormatInt(id, 10), marshalUser(user), time.Hour)
return user, nil
}缓存问题
| 问题 | 解决方案 |
|---|---|
| 缓存穿透 | 布隆过滤器/null值 |
| 缓存击穿 | 互斥锁/永不过期 |
| 缓存雪崩 | 过期时间随机化 |
性能优化
连接池
go
db.SetMaxOpenConns(100)
db.SetMaxIdleConns(10)并发优化
go
// 串行
for _, item := range items {
process(item) // 慢
}
// 并行
var wg sync.WaitGroup
for _, item := range items {
wg.Add(1)
go func(i Item) {
defer wg.Done()
process(i)
}(item)
}
wg.Wait()📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01-28 | 基础/中间件 | ✅ |
| 29 | 缓存与性能优化 | ✅ |
| 30 | 复习总结 | ⬜ |
