业务常规的查询逻辑如下:
从redis中获取数据, 有则返回
当第一步redis无数据, 去MySQL查询数据
把第二步查询到的数据写入redis
返回数据
问题分析
redis当然不会有问题, 问题是在第二步的时候...去MySQL查询数据,数据库服务已经宕机, 这时候请求阻塞住
阻塞超时,然后抛出异常,导致无法走到第三步
下一次请求来, 又继续去连接MySQL,无限阻塞,把业务服务器也拖垮
解决方案
这是我们的解决方案...try {
return parent::get($columns);
} catch (\Exception $e) {
// 根据 laravel...// 强制返回空集合
return Collection::make();
}
// 如果不在处理的范围内..., 继续抛出异常
throw $e;
}
}
}
之后需要重点监控日志报错, 来确定页面为空是运营配置的问题还是数据库异常的问题