业务常规的查询逻辑如下:
从redis中获取数据, 有则返回
当第一步redis无数据, 去MySQL查询数据
把第二步查询到的数据写入redis
返回数据
问题分析
redis当然不会有问题, 问题是在第二步的时候...去MySQL查询数据,数据库服务已经宕机, 这时候请求阻塞住
阻塞超时,然后抛出异常,导致无法走到第三步
下一次请求来, 又继续去连接MySQL,无限阻塞,把业务服务器也拖垮
解决方案
这是我们的解决方案...)
{
return new MysqlCustomBuilder($query);
}
}
新建一个查询构造器类MysqlCustomBuilder
<?...php
namespace App\Models\Database;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database...try {
return parent::get($columns);
} catch (\Exception $e) {
// 根据 laravel