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 相关文章推荐
增加反向链接的101个方法 站长推荐
Jan 31 PHP
php采集速度探究总结(原创)
Apr 18 PHP
php 应用程序安全防范技术研究
Sep 25 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
php绘制一条弧线的方法
Jan 24 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
php实现断点续传大文件示例代码
Jun 19 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中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
微信自定义分享php代码分析
2016/11/24 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
javascript Math.random()随机数函数
2009/11/04 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
python进阶教程之动态类型详解
2014/08/30 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
产品销售员岗位职责
2013/12/18 职场文书
房屋出租委托书格式
2014/09/23 职场文书
教师节慰问信
2015/02/15 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
酒店温馨提示语
2015/07/14 职场文书
月考总结与反思
2015/10/22 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
Python中的嵌套循环详情
2022/03/23 Python
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python