Laravel 数据库读写分离
config/database.php
...
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_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,
'engine' => null,
],
/* test master/slave */
'laravel_test_ms'=>array(
'read'=>array(
'host' => '10.0.13.46',
'username' => 'laravel_reader',
'password' => 'qwerqwer123',
),
'write'=>array(
'host' => '10.0.13.46',
'username' => 'laravel_writer',
'password' => '1qaz1qaz123',
),
'driver' => 'mysql',
'database' => 'laravel',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
),
/* 多数据库连接-读写分离-手动 */
'laravel_reader'=>array(
'driver' => 'mysql',
'host' => '10.0.13.46',
'database' => 'laravel',
'username' => 'laravel_reader',
'password' => 'qwerqwer123',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
),
'laravel_writer'=>array(
'driver' => 'mysql',
'host' => '10.0.13.46',
'database' => 'laravel',
'username' => 'laravel_writer',
'password' => '1qaz1qaz123',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
),
...
app/Http/routes.php
Route::get('tongji/info', 'TongjiController@info');
Route::get('tongji/multi', 'TongjiController@multi');
Route::get('tongji/ms', 'TongjiController@ms');
app/Http/Controllers/TongjiController.php
<?php
namespace App\Http\Controllers;
use App\Tongji;
class TongjiController extends Controller
{
/**
* 多数据库连接-读写分离-手动
* @access public
* @author zhaoyingnan 2016-09-18 17:05
* @return mix
* @note
**/
public function multi()
{
return Tongji::mMultiDBConfTest(2);
}
/**
* 框架自动读写分离
* @access public
* @author zhaoyingnan 2016-09-18 17:53
* @param int $iVar
* @return mix
* @note
**/
public function ms()
{
return Tongji::mMasterSlaveTest(1);
}
}
?>
app/Tongji.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
#use Illuminate\Support\Facades\DB;
use DB;
class Tongji extends Model
{
/**
* 1.读写分离-多数据库连接(database.php)-手动
* @access public
* @author zhaoyingnan 2016-09-18 17:00
* @param int $iType
* @return mix
* @note
**/
static function mMultiDBConfTest($iType = 1)
{
# 数据库权限设置
# grant select on laravel.* to laravel_reader@'%' identified by 'qwerqwer123';
# grant select,insert,update,delete on laravel.* to laravel_writer@'%' identified by '1qaz1qaz123';
# flush privileges;
if($iType == 1)
{
# reader
return DB::connection('laravel_reader')->select('select * from student limit 1');
}
else
{
# writer
return DB::connection('laravel_writer')->update('update student set `age`=:age where id=:id', array('age'=>22, 'id'=>1));
}
}
/**
* 2.读写分离-框架自动
* @access public
* @author zhaoyingnan 2016-09-18 17:41
* @param int $iType
* @return mix
* @note
**/
static function mMasterSlaveTest($iType = 1)
{
if($iType == 1)
{
# reader
return DB::connection('laravel_test_ms')->select('select * from student limit 1');
}
else
{
# writer
return DB::connection('laravel_test_ms')->update('update student set `age`=:age where id=:id', array('age'=>20, 'id'=>3));
}
}
}
?>
Laravel 数据库读写分离的更多相关文章
- Spring aop应用之实现数据库读写分离
Spring加Mybatis实现MySQL数据库主从读写分离 ,实现的原理是配置了多套数据源,相应的sqlsessionfactory,transactionmanager和事务代理各配置了一套,如果 ...
- CYQ.Data V5 数据库读写分离功能介绍
前言 好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来: 这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始 ...
- ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:There is no active transaction
如题:ThinkPHP v3.2.3 数据库读写分离,开启事务时报错: ERR: There is no active transaction 刚开始以为是数据表引擎不对造成的,因为 有几张表的引擎是 ...
- EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~终结~配置的优化和事务里读写的统一
回到目录 本讲是通过DbCommand拦截器来实现读写分离的最后一讲,对之前几篇文章做了一个优化,无论是程序可读性还是实用性上都有一个提升,在配置信息这块,去除了字符串方式的拼接,取而代之的是sect ...
- 161220、使用Spring AOP实现MySQL数据库读写分离案例分析
一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...
- [转]Spring数据库读写分离
数据库的读写分离简单的说是把对数据库的读和写操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力. 主(master)数据库提供写操作,从(slave)数据库提供读操作,其实在 ...
- spring+mybatis利用interceptor(plugin)兑现数据库读写分离
使用spring的动态路由实现数据库负载均衡 系统中存在的多台服务器是"地位相当"的,不过,同一时间他们都处于活动(Active)状态,处于负载均衡等因素考虑,数据访问请求需要在这 ...
- 学会数据库读写分离、分表分库——用Mycat,这一篇就够了!
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- yii2的数据库读写分离配置
简介 数据库读写分离是在网站遇到性能瓶颈的时候最先考虑优化的步骤,那么yii2是如何做数据库读写分离的呢?本节教程来给大家普及一下yii2的数据库读写分离配置. 两个服务器的数据同步是读写分离的前提条 ...
随机推荐
- 放养的小爬虫--京东定向爬虫(AJAX获取价格数据)
放养的小爬虫--京东定向爬虫(AJAX获取价格数据) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wang/Sp ...
- NSPredicate 的使用
NSPredicate是什么? NSPredicate 是预测的意思 但是我们常翻译成谓词 它可以干什么? 使用NSPredicate可以定义模糊查询条件 根据一定的条件 我们就可以从一个数组中快速找 ...
- CSS垂直居中和水平居中
前言 CSS居中一直是一个比较敏感的话题,为了以后开发的方便,楼主觉得确实需要总结一下了,总的来说,居中问题分为垂直居中和水平居中,实际上水平居中是很简单的,但垂直居中的方式和方法就千奇百怪了. 内联 ...
- .NET Core全新路线图(译)
标签: .NETCore 翻译 承接张善友大大的.NET Core全新路线图,翻译了原文,水平有限,尽量一观. 原文地址<.NET Core Roadmap>,原作者Scott Hunte ...
- C#基础-技术还债3-枚举【pending】
/// <summary> /// 声明三方查询类型可以关联的查询对象类型 /// </summary> [AttributeUsage(AttributeTargets.Fi ...
- 流行ORM产品优缺点分析--EntityFramework、NHibernate、PetaPoco
什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操 ...
- 使用git error: RPC failed; result=22, HTTP code = 411
使用git提交比较大的文件的时候可能会出现这个错误 error: RPC failed; result=22, HTTP code = 411 fatal: The remote end hung u ...
- 线程.FTP.SFTP.打包
Windows就是多线程模式.每一个解决方案就是一个进程.一个进程下拥有多个线程. 简单点.单核的处理器不存在多线程.是CPU在每一个线程上切换处理.在人反应不过来的情况下完成同步的效果. 比如左手画 ...
- SharePoint 2013 工作流之使用Visio设计篇
SharePoint 2013增强了工作流,不仅仅基于WorkFlow Foundation 4.0了,设计方式也不仅仅是Designer,还包括Visio中设计,下面我们就一个简单的例子,介绍下. ...
- iOS之ShareSDK实现分享、第三方登录等功能
(1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...