Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP+MYSQL实现读写分离

PHP+MYSQL实现读写分离

不言
不言asal
2018-04-04 14:11:351992semak imbas

本篇文章的内容是PHP+MYSQL实现读写分离 ,现在分享给大家,有需要的朋友也可以参考一下这篇文章的内容

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 == &#39;select&#39;)
    {
      $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=&#39;root&#39;;
    $pass=&#39;123456&#39;;
    $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=&#39;192.168.33.22&#39;;
    $dsn="mysql:host=$master_server;dbname=test";
    $user=&#39;root&#39;;
    $pass=&#39;123456&#39;;
    $dbh=new PDO($dsn, $user, $pass);
    return $dbh->exec($sql);
  }
 
  /**
   * 随机获取slave-ip
   * @return mixed
   */
  private function get_slave_ip(){
    $slave_ips=[&#39;192.168.33.33&#39;,&#39;192.168.33.44&#39;];
    $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 (&#39;haha&#39;)";
$sql3 = "delete from t1 where id=1";
$sql4 = "update t1 set name=&#39;Jerry&#39; 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设计思想之代理模式与读写分离的实践

phalapi之如何实现数据库读写分离

Atas ialah kandungan terperinci PHP+MYSQL实现读写分离 . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn