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 == '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());
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
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!