当前位置:首页 > PHP > 正文内容

laravel中设置数据库读写分离后强制使用主库查询

phpmianshi3个月前 (07-27)PHP138

背景


在项目比较火爆,QPS比较高时,可以设置读写分离来扩容数据库,减少数据库的压力,但是有些业务可能对数据一致性要求比较高,比如支付。

当支付成功时,再去查询订单状态时,如果查询走的从库,如果出现主从延迟,就会发现订单还是未支付状态,就会给用户带来很大困扰,在laravel或者lumen项目中如何设置某个业务强制主库查询呢?现在我们介绍几种方法。

使用model强制获取主库数据

UserModel::onWriteConnect()->get();

使用 DB 方法获取主库数据

  • 方法一:

$sql = 'select * from user';
DB::select($sql, [], false);
  • 方法二:

DB::table('user')->lock()->get();
  • 方法三:

'write' => [
            'driver'    => 'mysql',
            'host'      => env('DB_WRITE_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
#手动链接主库查询
DB::connection('write')->table('a')->get();


  • 方法四(仅供参考):

$pdo = DB::connection()->getPdo();
$data=DB::connection()->setPdo($pdo)->table('user')->get();
  • 方法五:

$sql = 'select * from user';
DB::selectFromWriteConnection($sql);


版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

PHP中跨域原理以及解决方案

1.为啥出现跨域在制定Html规则时,为了安全的考虑,一个源的脚本(网页,网站)不能与另一个源的资源进行交互,所以就引发一个词叫做“同源策略”。所谓同源(即指在同一个域),就是两个页面具有相同的协议(...

PHP内核分析之生命周期五个阶段(四)

一、模块初始化阶段我们先来看一下该阶段的每个函数的作用。1.1、sapi_initialize_request_empty函数// main/SAPI.c SAPI_API vo...

PHP红包分配算法

<?php /**  * User: phpmianshi.com   * Date: 2020/3/31 &nbs...

PHP中 array_walk array_map array_filter区别

array_walk:array_walk — 使用用户自定义函数对数组中的每个元素做回调处理1. 用户自定义的函数处理每一个元素2. 直接修改原数组,不会创建新的数组3. 可以传递额外的参数更多信息...

PHP内核分析之生命周期(三)

一、概览PHP生命周期有五个阶段,分别为模块初始化阶段、请求初始化阶段、执行阶段、请求关闭阶段、模块关闭阶段。只是不同SAPI模式下,请求的情况略有不同,比如FastCGI下只经历了一次模块初始化阶段...

php闭包的优缺点

闭包函数:临时创建一个没有名称的函数,经常作为回调函数来用。通俗的说就是:子函数可以使用父函数中的局部变量,这种行为叫做闭包。我的理解是: 闭包就是能够读取其他函数内部变量的函数。匿名函数赋...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。