欢迎来到站长教程网!

PHP教程

当前位置: 主页 > 网络编程 > PHP教程

PHP+MYSQL 读写分离简单实战

时间:2017-11-23 12:33:03|栏目: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());

上一篇:详谈php ip2long 出现负数的原因及解决方法

栏    目:PHP教程

下一篇:PHP数据类型转换(字符串转数字,数字转字符串)

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

本文地址:https://demoall.kuaituiyun.cn/16864/wangluobiancheng/PHPjiaocheng/162.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

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

联系QQ:88888888 | 邮箱:88888888@qq.com

Copyright © 2002-2023 某某站长教程网 版权所有粤ICP备xxxxxxxx号