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 Zip解压 文件在线解压缩的函数代码
May 26 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
PHP过滤★等特殊符号的正则
Jan 27 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
php截取字符串函数分享
Feb 02 PHP
php发送与接收流文件的方法
Feb 11 PHP
php经典算法集锦
Nov 14 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
小偷PHP+Html+缓存
2006/11/25 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
Python中super函数用法实例分析
2019/03/18 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
《鞋匠的儿子》教学反思
2014/03/02 职场文书
主办会计岗位职责
2014/03/13 职场文书
水电工岗位职责
2015/02/14 职场文书
小学六一主持词开场白
2015/05/28 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android