PHP+MYSQL实现读写分离简单实战


Posted in PHP onMarch 13, 2017

1、Introduction

之前写过2篇文章,分别是:

Mysql主从同步的原理 

Myql主从同步实战 

基于此,我们再实现简单的PHP+Mysql读写分离,从而提高数据库的负载能力。

2、代码实战

<?php
class Db
{
  private $res;
  function __construct($sql)
  {
    $querystr = strtolower(trim(substr($sql,0,6)));
    //如果是select,就连接slave服务器
    if($querystr == 'select')
    {
      $res=$this->slave_select($sql);
      $this->res=$res;
    }
    //如果不是select,就连接master服务器
    else
    {
      $res=$this->master_change($sql);
      $this->res=$res;
    }
  }

  /**
   * slave从库返回sql查询结果
   * @param $sql
   * @return array
   */
  private function slave_select($sql){
    //该处只是随机获取slave节点的ip,当然,还可以采用其他算法获取slave_ip
    $slave_server=$this->get_slave_ip();
    $dsn="mysql:host=$slave_server;dbname=test";
    $user='root';
    $pass='123456';
    $dbh=new PDO($dsn, $user, $pass);
    return $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  }

  /**master主库返回sql执行结果
   * @param $sql
   * @return int
   */
  private function master_change($sql){
    $master_server='192.168.33.22';
    $dsn="mysql:host=$master_server;dbname=test";
    $user='root';
    $pass='123456';
    $dbh=new PDO($dsn, $user, $pass);
    return $dbh->exec($sql);
  }

  /**
   * 随机获取slave-ip
   * @return mixed
   */
  private function get_slave_ip(){
    $slave_ips=['192.168.33.33','192.168.33.44'];
    $count=count($slave_ips)-1;
    $random_key=mt_rand(0,$count);
    return $slave_ips[$random_key];
  }

  /**       
   * 获取结果
   * @return int
   */
  public function get_res(){
    return $this->res;
  }
}

$sql1 = "select * from t1";
$sql2 = "insert into t1 (name) values ('haha')";
$sql3 = "delete from t1 where id=1";
$sql4 = "update t1 set name='Jerry' where id=2";

$db = new Db($sql1);
//$db = new Db($sql2);
//$db = new Db($sql3);
//$db = new Db($sql4);

var_dump($db->get_res());

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP中strtotime函数使用方法详解
Nov 27 PHP
php分页函数示例代码分享
Feb 24 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
Apr 20 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
浅谈PHP的反射机制
Dec 15 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
php查询及多条件查询
Feb 26 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
CI框架简单分页类用法示例
Jun 06 PHP
PHP计算近1年的所有月份
Mar 13 #PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 #PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 #PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 #PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
Mar 13 #PHP
php解析mht文件转换成html的实例
Mar 13 #PHP
使用phpQuery获取数组的实例
Mar 13 #PHP
You might like
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
pyramid配置session的方法教程
2013/11/27 Python
Python魔术方法详解
2015/02/14 Python
Python中扩展包的安装方法详解
2017/06/14 Python
python的mysqldb安装步骤详解
2017/08/14 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
关于打架的检讨书
2014/01/17 职场文书
股东合作协议书
2014/04/14 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
公司辞职信模板
2015/05/13 职场文书
军训通讯稿范文
2015/07/18 职场文书
话题作文之成长
2019/12/09 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python