欢迎来到资源库(www.zyku.net)

PHP教程

当前位置:首页 > 网络编程 > PHP教程 > 读写分离

PHP+MYSQL 读写分离简单实战

时间:2017-03-14|栏目:PHP教程|点击:|我要投稿

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());

原文链接:https://segmentfault.com/a/1190000008664288

(资源库 www.zyku.net)

上一篇:通过PHP代码将网站保存到桌面的方法

栏    目:PHP教程

下一篇:php生成无限栏目树

本文标题:PHP+MYSQL 读写分离简单实战

本文地址:https://www.zyku.net/php/1225.html

关于我们 | 版权申明 | 寻求合作 |

重要申明:本站所有的文章、图片、评论等内容,均由网友发表或上传并维护或收集自网络,仅供个人学习交流使用,版权归原作者所有。

如有侵犯您的版权,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:95148658 | 邮箱:mb8#qq.com(#换成@)

苏ICP备2020066115号-1

本网站由提供CDN加速/云存储服务