首页 > PHP教程 > php开发知识文章

PHP与MYSQL实现读写分离的方法

本文主要介绍了PHP与MYSQL实现读写分离的方法,实例分析了读写分离的技巧,从而提高数据库的负载能力

Mysql主从同步的原理 

Myql主从同步实战 

对于大访问量的网站,使用读写分离,会极大提高性能

本文实现简单的PHP+Mysql读写分离,从而提高数据库的负载能力。

代码:

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;
} else {
//如果不是select,就连接master服务器
$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=user";
$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 = '127.0.0.1';
$dsn = "mysql:host=$master_server;dbname=user";
$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.1.1', '192.168.1.2'];
$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 user";
$sql2 = "insert into user (name) values ('php')";
$sql3 = "delete from user where id=1";
$sql4 = "update user set name='python' 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与MYSQL实现读写分离的方法的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

美景欣赏

PHP与MYSQL实现读写分离的方法

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。