1、Introduction
之前寫過2篇文章,分別是:
Mysql主從同步的原理
Myql主從同步實(shí)戰(zhàn)
基于此,我們再實(shí)現(xiàn)簡單的PHP+Mysql讀寫分離,從而提高數(shù)據(jù)庫的負(fù)載能力。
2、代碼實(shí)戰(zhàn)
<?phpclass Db{  private $res;  function __construct($sql)  {    $querystr = strtolower(trim(substr($sql,0,6)));    //如果是select,就連接slave服務(wù)器    if($querystr == 'select')    {      $res=$this->slave_select($sql);      $this->res=$res;    }    //如果不是select,就連接master服務(wù)器    else    {      $res=$this->master_change($sql);      $this->res=$res;    }  }  /**   * slave從庫返回sql查詢結(jié)果   * @param $sql   * @return array   */  private function slave_select($sql){    //該處只是隨機(jī)獲取slave節(jié)點(diǎn)的ip,當(dāng)然,還可以采用其他算法獲取slave_ip    $slave_server=$this->get_slave_ip();    $dsn="mysql/222588.html">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執(zhí)行結(jié)果   * @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);  }  /**   * 隨機(jī)獲取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];  }  /**          * 獲取結(jié)果   * @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());以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選