laravel 数据库迁移(Laravel数据库读写分离配置的方法)
类别:编程学习 浏览量:286
时间:2021-10-01 01:27:28 laravel 数据库迁移
Laravel数据库读写分离配置的方法配置范例
|
'mysql' => [ 'driver' => 'mysql' , 'write' => [ 'host' => '192.168.1.180' , ], 'read' => [ [ 'host' => '192.168.1.182' ], [ 'host' => '192.168.1.179' ], ], ... ] |
或
|
'mysql' => [ 'driver' => 'mysql' , 'write' => [ 'host' => '192.168.1.180' , ], 'read' => [ 'host' => [ '192.168.1.182' , '192.168.1.179' ], ], ... ] |
扩展配置范例
|
'mysql' => [ 'driver' => 'mysql' , 'write' => [ 'host' => '192.168.1.180' , 'username' => 'write' , 'password' => 'write' , ], 'read' => [ [ 'host' => '192.168.1.182' , 'username' => 'read1' , 'password' => 'read1' , ], [ 'host' => '192.168.1.179' , 'username' => 'read2' , 'password' => 'read2' , ], ], ... ] |
或者
|
'mysql' => [ 'driver' => 'mysql' , 'write' => [ 'host' => '192.168.1.180' , 'username' => 'write' , 'password' => 'write' , ], 'read' => [ 'host' => [ '192.168.1.179' , '192.168.1.182' , ], 'username' => 'read' , 'password' => 'read' , ], ... ] |
公司数据库架构为一主多从,从库访问地址为唯一地址,该处方便负载均衡及扩展从库。所以最终线上采用的配置
|
'mysql' => [ 'driver' => 'mysql' , 'write' => [ 'host' => '192.168.1.180' , 'username' => 'write' , 'password' => 'write' , ], 'read' => [ 'host' => '192.168.1.179' 'username' => 'read' , 'password' => 'read' , ], ... ] |
代码分析
授人以鱼不如授人以渔,之所以配置如此灵活的原因,以及如何查找到这些配置方式。主要通过查找代码,分析代码;相关代码都在下面粘出,这里就不做解释了,代码能说明一切;
路径:vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php
代码:
|
class ConnectionFactory { ... /** * Get the read configuration for a read / write connection. * * @param array $config * @return array */ protected function getReadConfig( array $config ) { $readConfig = $this ->getReadWriteConfig( $config , 'read' ); if (isset( $readConfig [ 'host' ]) && is_array ( $readConfig [ 'host' ])) { $readConfig [ 'host' ] = count ( $readConfig [ 'host' ]) > 1 ? $readConfig [ 'host' ][ array_rand ( $readConfig [ 'host' ])] : $readConfig [ 'host' ][0]; } return $this ->mergeReadWriteConfig( $config , $readConfig ); } ... /** * Get a read / write level configuration. * * @param array $config * @param string $type * @return array */ protected function getReadWriteConfig( array $config , $type ) { if (isset( $config [ $type ][0])) { return $config [ $type ][ array_rand ( $config [ $type ])]; } return $config [ $type ]; } ... /** * Merge a configuration for a read / write connection. * * @param array $config * @param array $merge * @return array */ protected function mergeReadWriteConfig( array $config , array $merge ) { return Arr::except( array_merge ( $config , $merge ), [ 'read' , 'write' ]); } ... } class Arr { ... /** * Get all of the given array except for a specified array of items. * * @param array $array * @param array|string $keys * @return array */ public static function except( $array , $keys ) { static ::forget( $array , $keys ); return $array ; } ... /** * Remove one or many array items from a given array using "dot" notation. * * @param array $array * @param array|string $keys * @return void */ public static function forget(& $array , $keys ) { $original = & $array ; $keys = ( array ) $keys ; if ( count ( $keys ) === 0) { return ; } foreach ( $keys as $key ) { $parts = explode ( '.' , $key ); while ( count ( $parts ) > 1) { $part = array_shift ( $parts ); if (isset( $array [ $part ]) && is_array ( $array [ $part ])) { $array = & $array [ $part ]; } else { $parts = []; } } unset( $array [ array_shift ( $parts )]); // clean up after each pass $array = & $original ; } } ... } |
以上这篇Laravel数据库读写分离配置的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:http://blog.onlywan.cc/14847498744910.html
您可能感兴趣
- laravel队列是如何触发的(laravel使用Faker数据填充的实现方法)
- laravel权限控制(laravel-admin 在列表页添加自定义按钮的例子)
- phplaravel一般开发什么项目(laravel 去掉index.php伪静态的操作方法)
- laravel自定义命令(laravel-admin select框默认选中的方法)
- laravel新增数据表(laravel实现上传图片的两种方式小结)
- laravel框架的高级知识点(laravel配置Redis多个库的实现方法)
- laravel请求处理流程(详解如何实现Laravel的服务容器的方法示例)
- laravel自定义使用方法(laravel 获取当前url的别名方法)
- laravel框架怎么获取变量(解决laravel id非自增 模型取回为0 的问题)
- laravel数据库操作方式(Laravel 实现数据软删除功能)
- 安装laravel框架(laravel框架的安装与路由实例分析)
- php框架laravel使用(laravel5环境隐藏index.php后缀apache的方法)
- laravel命令大全详解(Laravel框架中缓存的使用方法分析)
- laravel模型获取表名(Laravel 对某一列进行筛选然后求和sum的例子)
- Laravel 中创建 Zip 压缩文件并提供下载的实现方法(Laravel 中创建 Zip 压缩文件并提供下载的实现方法)
- laravel 后台任务配置(在Laravel中使用GuzzleHttp调用第三方服务的API接口代码)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
- 痴情男神 吴彦祖 与妻子恋爱8年,结婚10年,家庭幸福美满(痴情男神吴彦祖)
- 成功破圈,小牛电动SQi强势开 跨(小牛电动SQi强势开)
- 挑战新国标电自天花板,九号机械师MMAX 110P深度体验(挑战新国标电自天花板)
- 《满江红》不要只当电影看,学生应该这样做(满江红不要只当电影看)
热门推荐
- dedecms漏洞防范(浅析DedeCMS投票模块漏洞的解决方法)
- php单例模式教程学习(PHP下用Swoole实现Actor并发模型的方法)
- css绝对布局和相对布局(如何理解 CSS 布局和块级格式上下文)
- JSON中的特殊字符
- dockerregistry原理(解决Docker x509 insecure registry的问题)
- python序列化图解(对Python3 序列解包详解)
- css中div高度自适应
- h5前端入门(前端H5 Video常见使用场景简介)
- javascript如何判断类型(JavaScript如何优化逻辑判断代码详解)
- python mysql配置(详解python校验SQL脚本命名规则)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9