>  기사  >  백엔드 개발  >  PHP+MYSQL은 읽기와 쓰기 분리를 실현합니다.

PHP+MYSQL은 읽기와 쓰기 분리를 실현합니다.

不言
不言원래의
2018-04-04 14:11:351975검색

이 글의 내용은 읽기와 쓰기 분리를 구현한 PHP+MYSQL에 관한 내용입니다. 이제 모두와 공유하겠습니다. 도움이 필요한 친구들도 이 글의 내용을 참고할 수 있습니다.

1. 소개
이전에 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 - 데이터베이스 읽기와 쓰기 분리를 달성하는 방법

위 내용은 PHP+MYSQL은 읽기와 쓰기 분리를 실현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.