Maison  >  Article  >  développement back-end  >  Explication pratique détaillée de la séparation en lecture et en écriture à l'aide de PHP+MYSQL

Explication pratique détaillée de la séparation en lecture et en écriture à l'aide de PHP+MYSQL

墨辰丷
墨辰丷original
2018-05-24 17:17:262198parcourir

Cet article présente principalement PHP+MYSQL pour réaliser la séparation en lecture et en écriture. Il analyse les techniques de séparation en lecture et en écriture avec des exemples, améliorant ainsi la capacité de charge de la base de données. Il a une certaine valeur de référence. à ce sujet.

1. Introduction

J'ai déjà écrit 2 articles, à savoir :

Le principe de la synchronisation maître-esclave Mysql

Pratique de synchronisation maître-esclave MySQL

Sur cette base, nous implémenterons une simple séparation de lecture et d'écriture PHP+Mysql pour améliorer la capacité de charge de la base de données.

2. Pratique du code

<?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());

Ce qui précède est l'intégralité du contenu de cet article, J'espère que cela sera utile à tout le monde. L'apprentissage aide.


Recommandations associées :

Méthode php pour se connecter à mysqlbase de données

Utilisez la classe $wpdb de wordpress pour liremysqlComment résoudre les problèmes qui surviennent lors de l'exécution d'ajax sur la base de données

php mysqlExplication détaillée de l'utilisation de la fonction _list_dbs()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn