PHP+MYSQL实现读写分离简单实战
作者:zilu 时间:2023-11-23 21:30:42
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());
来源:https://segmentfault.com/a/1190000008664288
标签:读写分离,PHP,mysql
0
投稿
猜你喜欢
golang goquery selector选择器使用示例大全
2023-10-14 15:40:58
有用的:nth-child秘方
2011-07-01 12:56:11
js正则的几个基本概念
2007-09-30 20:02:00
Python远程控制Windows服务器的方法详解
2023-07-13 13:14:03
不能安装SQL Server 2005的问题及解决方法
2008-12-26 17:41:00
GoLang使goroutine停止的五种方法实例
2023-09-02 08:31:33
asp 在线备份与恢复sqlserver数据库的代码
2011-03-06 11:14:00
小结Python的反射机制
2023-10-16 22:30:28
ASP 千万级数据分页的存储过程
2011-04-14 11:08:00
对fieldset和legend的默认样式一点分析
2008-07-02 12:56:00
说说页面中header的XHTML结构选择
2008-06-09 12:49:00
如何在一个广告旗帜里轮番显示时间长度不一的不同广告?
2010-06-26 12:35:00
SQL Server 作业的备份(备份作业非备份数据库)
2012-07-11 15:58:49
.NET反向代理组件YARP介绍
2023-07-23 02:29:45
详解Go 将在下个版本支持新型排序算法pdqsort
2023-10-07 23:49:40
PHP中Too few arguments to function的问题及解决
2023-06-04 21:15:55
不成熟的标准化是我们唯一惧怕的
2008-08-15 18:55:00
解析:正确的理解SQL Server和XML支持
2009-01-23 13:52:00
分析SQL语句性能3种方法分享
2012-06-06 20:09:30
超酷的js图片轮播渐变效果
2007-10-10 20:45:00