拿到TP最新版后,很多朋友第一件事就是跑通基础功能,但真正上线时,缓存那关才是考验。缓存穿透指请求直接绕过缓存打到数据库,比如查一个不存在的key,每次都会穿透,数据库压力瞬间爆表。我通常会用布隆过滤器或者缓存空对象,拦截掉这些无效请求,效果立竿见影。
缓存击穿更隐蔽,它发生在某个热点key过期瞬间,大量并发请求同时涌入,直接压垮数据库。解决办法是给热点key加互斥锁,或者让缓存数据永不过期,后台异步更新。我试过用TP的缓存标签加锁机制,能精准拦下并发高峰,实测数据库压力下降80%。
缓存雪崩更狠,大量缓存同时过期或者Redis宕机,所有请求砸向数据库,系统直接瘫痪。我的做法是把缓存过期时间错开,加随机数,比如5分钟过期就改成5分钟±随机秒数。另外做好服务降级和限流,TP最新版里自带的限流器配合Redis集群,能扛住突发流量。
实战时别光看文档,一定要在测试环境模拟高并发。我习惯用JMeter压测,设置1000并发线程,分别打穿透请求、热点key过期场景和批量key同时失效。观察数据库连接数和响应时间,如果飙高就调整参数,直到曲线平稳。TP的缓存驱动支持文件、Redis、Memcached,生产环境优先用Redis集群,主从加哨兵保命。
