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语法(4)
Oct 09 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
PHP 学习路线与时间表
Feb 21 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
PHP提取字符串中的图片地址[正则表达式]
Nov 12 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
php封装的page分页类完整实例代码
Feb 01 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
php通用防注入程序 推荐
2011/02/26 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
js实现左右两侧浮动广告
2018/07/09 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
python图片验证码生成代码
2016/07/02 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
微信小程序python用户认证的实现
2019/07/29 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python实现快递价格查询系统
2020/03/03 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
大学生自我鉴定
2013/12/08 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
奖励通知
2015/04/22 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
经典爱情感言
2015/08/03 职场文书
PHP解决高并发问题
2021/04/01 PHP
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题