三个问题的本质
穿透是查不存在的数据,击穿是热点 key 失效瞬间,雪崩是大面积同时失效。三者共同点:请求都打到了数据库。
穿透用布隆过滤器或缓存空值;击穿用互斥锁或逻辑过期;雪崩用随机 TTL 加多级缓存。
代码怎么落地
方案不难,难的是判断你的业务属于哪一种。很多时候上了布隆过滤器,其实只是 key 设计不合理。
穿透是查不存在的数据,击穿是热点 key 失效瞬间,雪崩是大面积同时失效。三者共同点:请求都打到了数据库。
穿透用布隆过滤器或缓存空值;击穿用互斥锁或逻辑过期;雪崩用随机 TTL 加多级缓存。
方案不难,难的是判断你的业务属于哪一种。很多时候上了布隆过滤器,其实只是 key 设计不合理。
jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。
一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。
百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。
评论 (1)