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 远程图片保存到本地的函数类
Dec 08 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
php实现CSV文件导入和导出
Oct 24 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
php组合排序简单实现方法
Oct 15 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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代码
2007/03/03 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
window.open的功能全解析
2006/10/10 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
软件测试英文面试题
2012/10/14 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
车辆年审委托书范本
2014/09/18 职场文书
农村党支部承诺书
2015/04/30 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server