一、为什么DB被打崩了
1.1 穿透到DB被打崩场景还原
代码逻辑:
Redis缓冲查询不到(被穿透),查询DB重建缓冲
但代码不健壮,发生大量并发线程,并发访问热点DB数据
此类情况,轻造成重复浪费,重则DB被打崩
-
真实案例:突增了每秒一万次查询后,导致DB CPU100%,造成某个模块故障
- 如图,某个时刻Redis被击穿,大量查询DB, 可以看到DB在一段时间除以不可用状态
1.2 原始代码有什么问题
public void loadData(){
//1、待查询redis的id list
List<String> ids;
//2、从redis查询
List<String> redisValues = redisUtils.queryByCacheKeys("业务场景"+ids);
//3、如果请求的ID,在redis没有全部查询到,下沉到DB查询
if(Col