你有没有这种经验:常用的东西放书桌上,随手就拿;不常用的塞书架深处,要现找。缓存(Cache)就是这个思路。

一、缓存 = 把常用的放近处

访问数据要时间:从内存读是纳秒级,从数据库/硬盘读慢得多,从别的机器网络读更慢。

缓存就是把热点数据复制一份到更快、更近的地方(比如内存),下次直接拿,省去慢查询。

缓存像书桌

二、命中率:缓存好不好,看这个

  • 命中:要的数据缓存里有,直接给(快)。
  • 未命中:没有,得去源站取,再顺手存一份。

命中率 = 命中次数 / 总次数。命中率越高,缓存越值。

三、三个经典坑

  • 缓存穿透:查一个根本不存在的数据,缓存和数据库都没有,每次都打到数据库。对策:缓存“空结果”,或用布隆过滤器先挡一道。
  • 缓存击穿:某个热点 key 刚好过期的瞬间,海量请求同时打到数据库。对策:热点不过期,或加锁只放一个去查。
  • 缓存雪崩:一大批 key 同时过期,或缓存服务挂了,流量全砸向数据库,直接崩。对策:过期时间加随机抖动、做高可用、限流降级。

四、生活类比

奶茶店把常用小料提前备在手边(缓存),高峰时不用每次去冷库拿;但料放久了要换(过期),手边架子全空了就又得狂跑冷库(雪崩)。

一句话:缓存就是用“空间换时间”,把常用的放近处;用得好飞快,用不好反而把数据库打死。