缓存入门:为什么加了缓存反而更慢?从命中率到失效策略说清楚
缓存是后端开发里最常用、也最容易被误用的提速手段。它的本质很简单:把昂贵、重复的计算或查询结果,放在一个更快、更近的地方,下次直接取用,省去重复劳动。
一、缓存解决什么问题
数据库查询、远程调用、复杂计算都很贵。同一份数据在短时间内被反复请求时,每次都重新算一遍就是浪费。缓存把结果暂存起来,用空间换时间。但缓存不是万能的:它只适合读多写少、容忍短暂不一致的数据。写多读少的数据、要求强一致的资金类数据,都不适合直接缓存。
二、命中率是第一指标
命中率等于命中次数除以总请求数。命中率高,缓存才有意义。提高命中率的办法有:缓存真正的热点数据、合理设置过期时间、不缓存几乎不会被重复访问的冷数据。命中率长期偏低时,先别急着扩容,先看看是不是缓存了错误的东西,或者过期时间设得太短。
三、三种常见失效策略
定时过期:给数据一个有效期,到期自动失效,简单可靠,是最常用的方式。
主动更新:数据变更时立即更新或删除缓存,保证新鲜,但要处理好更新失败的情况,避免缓存与源数据长期不一致。
懒加载:缓存中没有时再去源头取,取回后顺手写入缓存,适合访问不均匀、不是所有数据都会被访问的场景。
四、必须小心的三个坑
缓存穿透:大量请求查询不存在的数据,每次都打到数据库。办法是缓存空值,或者在入口做参数校验。
缓存击穿:某个热点键恰好过期,瞬间大量请求涌向数据库。办法是加互斥锁,只让一个请求回源,其他请求稍等后读缓存。
缓存雪崩:大批键同时过期,数据库被压垮。办法是让过期时间随机分散,不要设成同一个值,也可以提前预热热点数据。
五、一个简单的上手顺序
先确认数据读多写少、允许短暂不一致;再选好键的命名和过期时间;上线后盯住命中率和数据库负载这两个指标;最后再考虑多级缓存、预热这些进阶做法。
缓存的价值不在“用了”,而在“用对了”。理解命中率、过期策略和三个常见坑,就能避开大部分问题,剩下的交给线上指标慢慢调。
- 点赞
- 收藏
- 关注作者
评论(0)