欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP+MYSQL实现读写分离

程序员文章站 2022-04-27 09:49:23
...
本篇文章的内容是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 == '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设计思想之代理模式与读写分离的实践

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

以上就是PHP+MYSQL实现读写分离 的详细内容,更多请关注其它相关文章!