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

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

phpmianshi1年前 (2020-07-27)php1233

背景


在项目比较火爆,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中连接mysql的三种方式和预处理下的sql注入

php中连接mysql的三种方式和预处理下的sql注入

基础一条 SQL 在 DB 接收到最终执行完毕返回,大致的过程如下:  1. 词法和语义解析;  2. 优化 SQL 语句,制定执行计划;  3. 执行并返回结果;即时 SQL$sql =&...

Laravel神奇的服务容器

IoC 容器, laravel 的核心Laravel 的核心就是一个 IoC 容器,根据文档,称其为“服务容器”通过举例来让读者去理解什么是 IoC(控制反转) 和&nb...

php中opcache注意事项以及调优

背景从 PHP5.5 开始,Opcache 扩展是核心的一部分,增加了对 PHP 脚本的字节码缓存的支持。对于动态语言(例如 PHP ),字节码缓存可以显著的提高性能,因为它可以确保脚本仅被编译一次。...

lumen项目集成laravelS后sentry无法上报的问题

背景公司项目严重依赖lumen系列,代码众多,重构困难,虽然访问量变大,性能问题越来越严重,急需要提升性能,于是找到了这个项目laravelS github : https://github.com/...

php8世界上最好的语言新版本特性

php8世界上最好的语言新版本特性

本文只会讲述新特性的一些关键点,更详细的介绍请认真阅读官方文档。01 Union Types(联合类型)说明一点,从 PHP 7 开始,支持下面这样的语法:function sum(int&...

php-fpm进程数优化看这一篇就够了

php-fpm进程数优化看这一篇就够了

概念CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。CGI(Common Gateway Interface)全称是“通用网关接口”,WEB 服务器与PH...

发表评论

访客

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