jiangslee / laravel-mysql-forcemaster
Laravel MySQL forcemaster 提示
v1.0.0
2022-05-03 03:59 UTC
Requires
- laravel/framework: ^9.4
- phpstan/phpstan: ^1.4
Requires (Dev)
- brainmaestro/composer-git-hooks: dev-prepare-for-symfony-6
- friendsofphp/php-cs-fixer: ^3.0
- jetbrains/phpstorm-attributes: ^1.0
- mockery/mockery: ^1.2
- orchestra/testbench: ^7.1
- phpunit/phpunit: ^9.0
- vimeo/psalm: ^4.10
This package is auto-updated.
Last update: 2024-09-30 01:52:11 UTC
README
RDS MySQL读写分离如何确保数据读取的时效性
阿里云内部网络会确保同步日志在主实例和只读实例间的实时传输,正常情况下只读实例不会有延迟产生。但受限于MySQL本身的复制机制,若同步日志的应用时间较久,会产生数据同步的延迟,这是MySQL在技术上无法规避的问题。为减小延迟,建议您的只读实例规格不小于主实例,从而确保有足够高的性能来应用同步日志。RDS支持用户设置延迟阈值,当某个只读实例的延迟超过该阈值时,系统会不再转发任何请求至该实例。当所有只读实例均超过延迟阈值时,请求直接路由到主库,不管主库的读权重是否开启。在使用读写分离过程中,若您需要某些查询语句获取实时性的数据,可通过Hint格式将这些查询语句强制转发至主实例执行。RDS读写分离支持的Hint格式为
/*FORCE_MASTER*/
,指定后续SQL到主实例执行。示例如下:
/*FORCE_MASTER*/ SELECT * FROM table_name;
相关链接:https://help.aliyun.com/document_detail/52221.html
https://learnku.com/laravel/t/66526?#reply222886
安装
composer require jiangslee/laravel-mysql-forcemaster -vvv
使用
使用->forceMaster()
手动增加/*FORCE_MASTER*/
$sql = DB::table('users')->select('*')->forceMaster()->toSql(); // /*FORCE_MASTER*/SELECT * FROM `users` $sql = DB::table('users')->select('*')->toSql(); // SELECT * FROM `users`
在事务中自动增加/*FORCE_MASTER*/
DB::beginTransaction(); $users = User::first(); try { $users->name = 'test'; $users->save(); dump($users->toSql()); // "/*FORCE_MASTER*/select * from `users`" $customers = CrmCustomer::first(); dump($customers->toSql()); // /*FORCE_MASTER*/select * from `crm_customers` $contacts = CrmContact::query()->first(); dump($contacts->toSql()); // /*FORCE_MASTER*/select * from `crm_contacts` // throw new Exception('test'); DB::commit(); } catch (\Throwable $th) { dump($users->toSql()); DB::rollBack(); } dump($users->toSql()); // select * from `users`
贡献
您可以通过以下三种方式之一进行贡献:
代码贡献过程并不正式。您只需确保遵循PSR-0、PSR-1和PSR-2编码规范。任何新的代码贡献都必须伴随单元测试(如果适用)。
PHP 扩展包开发
想知道如何从零开始构建PHP扩展包?
请关注我的实战课程,我会在此课程中分享一些扩展开发经验 —— 《PHP 扩展包实战教程 - 从入门到发布》
许可证
MIT