Golang 从入门到放弃 -0x17

Redis 与缓存基础:缓存解决什么问题、常见策略和几个高频坑。

后端服务只要一开始上量,很快就会碰到一个灵魂问题:为什么明明数据库没那么多数据,接口还是越来越慢?这时候缓存就会跑出来。很多团队第一反应是“上 Redis”,这方向没错,但如果只记住“上 Redis 就会快”,后面大概率还会再踩一轮坑。

缓存到底解决什么问题

缓存的本质,不是让代码看起来更高级,而是减少对慢资源的重复访问。数据库、远程接口、复杂计算,这些都可能是慢点。

一个很朴素的例子:

  • 热门文章详情被频繁读取
  • 每次都查数据库,数据库压力越来越大
  • 把结果放进缓存,重复请求直接取缓存

Redis 为什么常见

因为它快、简单、生态成熟,而且除了当缓存,还能做计数器、分布式锁、排行榜、消息队列之类的事。不过我们这一章先克制一点,只聊它最朴素也最常见的用法:缓存。

最简单的缓存读写

ctx := context.Background()

err := rdb.Set(ctx, "user:1", `{"id":1,"name":"Raymond"}`, 5*time.Minute).Err()
if err != nil {
    return err
}

value, err := rdb.Get(ctx, "user:1").Result()
if err != nil {
    return err
}

fmt.Println(value)

这里最关键的不是 API,而是那个过期时间。很多缓存事故的源头,不是没缓存,而是缓存设了和没设一样。

缓存穿透、击穿、雪崩

这几个词听起来像面试黑话,但其实对应的都是真问题。

  • 穿透:查一个根本不存在的数据,每次都打到数据库
  • 击穿:某个超热点 key 正好过期,大量请求瞬间打爆后端
  • 雪崩:一批 key 同时过期,后端集体遭殃

别急着背名词,先知道大意就够了。缓存不是加上就万事大吉,它也有自己的脾气。

最常用的缓存策略

业务里常见的是 Cache Aside,也就是“读时回填,写时更新或删缓存”。

func GetUser(ctx context.Context, id int) (*User, error) {
    key := fmt.Sprintf("user:%d", id)

    if value, err := rdb.Get(ctx, key).Result(); err == nil {
        var user User
        if json.Unmarshal([]byte(value), &user) == nil {
            return &user, nil
        }
    }

    user, err := repo.FindByID(ctx, id)
    if err != nil {
        return nil, err
    }

    data, _ := json.Marshal(user)
    _ = rdb.Set(ctx, key, data, 5*time.Minute).Err()

    return user, nil
}

更新数据时,很多场景下最简单靠谱的做法其实是“更新数据库后删缓存”,而不是一上来就追求双写一致性的完美幻觉。

缓存不是越多越好

有些数据天生就不适合缓存,比如变化频率极高、强一致性要求特别高、访问量其实并不高的数据。别把缓存当银弹,缓存是拿来省成本和提性能的,不是拿来制造复杂度的。

小结

这一章先把缓存的基本感觉建立起来:

  • 缓存是为了解决慢资源的重复访问。
  • Redis 常见,但别只会喊口号。
  • 过期时间、热点 key、一致性都是实际问题。
  • 很多场景下,“更新库后删缓存”已经够实用。

下一章我们说登录鉴权和 JWT。前面接口能跑了,接下来要开始决定“谁能调,谁不能调”。

Read more

Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。 这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。 一、什么是 Harness Engineering? Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多

By Fuyu Jia

Claude Code CLI + Ralph:让 AI 自动完成大型编程任务的终极方案

TL;DR 当你的编程任务大到一个 AI 对话窗口装不下时,Ralph 会帮你把任务拆成小块,让 Claude Code CLI 一个接一个地自动完成——每轮都用全新的上下文窗口,不会越写越糊涂。 一、什么是 Ralph? Ralph 是一个开源项目(GitHub 16k+ Stars),基于 Geoffrey Huntley 提出的 "Ralph Pattern" 构建。它的核心理念很简单: 不要让 AI 在一个漫长的会话里做完所有事情,而是把大任务拆成小故事,每个故事用一个全新的 AI 实例来完成。 这解决了 AI 编程中最常见的痛点——上下文窗口耗尽。当对话越来越长,AI 的输出质量会明显下降。Ralph 通过「每轮一个新实例」的方式,

By Fuyu Jia