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接口代码)
- 原创图画书,以儿童视角讲述中国故事(以儿童视角讲述中国故事)
- 八月再见 愿你岁月不扰,余生静好(八月再见愿你岁月不扰)
- 赏读 八月再见,九月你好(赏读八月再见九月你好)
- 散文 八月再见,九月,我在风中等你(散文八月再见九月)
- 8月再见 9月你好(8月再见)
- 魔兽世界 设计师爆料,原始版本并无PVP,跨阵营属于返璞归真(魔兽世界设计师爆料)
热门推荐
- 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