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框架实现多个视图共享相同数据的方法详解)
- laravel视图组件(Laravel5.4框架中视图共享数据的方法详解)
- laravel高级用法(Laravel5.1框架注册中间件的三种场景详解)
- laravel 表单验证图片(Laravel 自动生成验证的实例讲解:login / logout)
- laravel接口响应时间(laravel请求参数校验方法)
- laravel查询限制输出设置(laravel validate 设置为中文的例子验证提示为中文)
- laravel框架详解(laravel 5.3 单用户登录简单实现方法)
- laravel数据库配置(Laravel如何同时连接多个数据库详解)
- laravel如何设置默认模块(Laravel框架控制器的middleware中间件用法分析)
- laravel怎么设置返回指定列(在laravel5.2中实现点击用户头像更改头像的方法)
- laravel框架的高级知识点(laravel配置Redis多个库的实现方法)
- laravel队列是如何触发的(laravel 事件/监听器实例代码)
- laravel api 调试(Laravel框架自定义公共函数的引入操作示例)
- laravel查询限制输出设置(laravel 获取某个查询的查询SQL语句方法)
- laravel初始化(Laravel 登录后清空COOKIE的操作方法)
- laravel使用队列(基于laravel where的高级使用方法)
- 中国留学生都是富二代吗()
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
- 买绿宝不能只挑黄绿色 菜农教你3招挑,个个皮薄肉脆,香甜爆汁(买绿宝不能只挑黄绿色)
- 大果肉搭配薄瓜皮, 绿宝 脆甜爽口,不愧是甜瓜中的 佼佼者(大果肉搭配薄瓜皮)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
热门推荐
- mysql索引如何使用(MySQL 索引和数据表该如何维护)
- python飞机大战游戏背景(python实现飞机大战游戏)
- dedecms怎么修改模板(DedeCMS新建模型字段中附件样式的修改方法)
- docker compose的常用命令(安装docker和docker-compose实例详解)
- mysql中group_concat
- docker查看运行容器参数(Docker容器时区调整操作)
- vue创建项目同时引入elementui(Vue Element前端应用开发之开发环境的准备工作)
- php去水印方法(PHP开发的文字水印,缩略图,图片水印实现类与用法示例)
- 西部数码服务器月目录是什么(西部数码云服务器如何续费)
- dedecms怎么调用标签(dedecms直接访问域名不能跳转到index.php)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9