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

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

phpmianshi2周前 (07-27)PHP22

背景


在项目比较火爆,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面试资料网发布,如需转载请注明出处。
分享给朋友:
返回列表

上一篇:记一次连接Redis偶现超时的问题

没有最新的文章了...

相关文章

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

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

PHP内核分析之源码目录结构 (二)

一、目录概览以php-7.4.1为例,目录多达十多个,下面介绍主要目录。├── build   linux下编译相关的目录├── ext      P...

PHP7的垃圾回收机制

PHP7的垃圾回收机制

垃圾回收机制垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻...

php闭包的优缺点

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

PHP中max_execution_time设置不生效

问题描述:max_execution_time设置了1秒,但是发现超过3秒的脚本还是跑。于是深入研究下max_execution_time不生效的原因。官网描述:https://www.php.net...

PHP7 数组的底层实现

PHP7 数组的底层实现

PHP 数组具有的特性PHP 的数组是一种非常强大灵活的数据类型,在讲它的底层实现之前,先看一下 PHP 的数组都具有哪些特性。可以使用数字或字符串作为数组健值$arr = [1&...

发表评论

访客

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