Skip to content

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复习总结

本文为Go 30天学习计划第29天内容

📚 导航

| ← Day 28 - 上一章 | Day 30 - 下一章 →

最后更新: