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截取中文字符串的问题
Jul 12 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
PHP数字格式化
Dec 06 PHP
php的一些小问题
Jul 03 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP消息队列用法实例分析
Feb 12 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 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设计模式 Strategy(策略模式)
2011/06/26 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
详解php协程知识点
2018/09/21 PHP
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
JS原型对象的创建方法详解
2016/06/16 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
js实现拖拽上传图片功能
2017/08/01 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
flask中的wtforms使用方法
2018/07/21 Python
浅析python参数的知识点
2018/12/10 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
Python递归函数实例讲解
2019/02/27 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
python如何将图片转换素描画
2020/09/08 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
如何保障Web服务器安全
2014/05/05 面试题
趣味运动会活动方案
2014/02/12 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公司员工离职感言
2015/08/03 职场文书
python基础详解之if循环语句
2021/04/24 Python
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
mysql left join快速转inner join的过程
2021/06/30 MySQL
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python