01
缓存与快速查找
- 业务例子
- 把 userID → 用户信息、skuID → 商品配置、规则ID → 规则对象缓存在进程内,避免每次都遍历 slice 或重复查数据库。
- 为什么适合
- 业务天然有唯一 key,而且主要操作是按 key 查询,map 的平均 O(1) 查找非常匹配。
- 注意
- 如果多个 goroutine 会同时读写,普通 map 不能直接当并发缓存使用,需要 RWMutex、sync.Map 或更完整的缓存组件。
Map 最典型的价值是把‘按 key 查找’从线性遍历变成平均 O(1) 的哈希定位。真正做业务时,要先判断你的问题是不是‘根据唯一 key 快速定位数据’,而不是看到键值对就机械使用 map。
比如我需要根据 skuID 高频读取商品配置,就会把数据组织成 map[string]Config,因为核心操作是按唯一 key 查找;如果只是顺序展示或范围查询,我不会用 map。实际工程里我还会同时考虑并发安全、数据量和是否需要跨进程共享。