PHP+MYSQL实现读写分离简单实战


Posted in PHP onMarch 13, 2017

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 相关文章推荐
动态新闻发布的实现及其技巧
Oct 09 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
php无限遍历目录示例
Feb 21 PHP
php实现字符串翻转的方法
Mar 27 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
Mar 18 PHP
php截取视频指定帧为图片
May 16 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 PHP
PHP计算近1年的所有月份
Mar 13 #PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 #PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 #PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 #PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
Mar 13 #PHP
php解析mht文件转换成html的实例
Mar 13 #PHP
使用phpQuery获取数组的实例
Mar 13 #PHP
You might like
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
Jquery 绑定时间实现代码
2011/05/03 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
vue异步加载高德地图的实现
2018/06/19 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
python操作xml文件详细介绍
2014/06/09 Python
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
python基础教程之五种数据类型详解
2017/01/12 Python
python的unittest测试类代码实例
2017/12/07 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
Python tornado上传文件的功能
2020/03/26 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
2014自荐信的写作技巧
2014/01/28 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
营销与策划专业求职信
2014/06/20 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS