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

 更新时间:2017年03月13日 15:29:48   作者:zilu  
本篇文章主要介绍了PHP+MYSQL实现读写分离,实例分析了读写分离的技巧,从而提高数据库的负载能力,具有一定的参考价值,有兴趣的可以了解一下。

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ThinkPHP5对接IOS苹果支付代码

    ThinkPHP5对接IOS苹果支付代码

    前端在调起苹果支付前,先请求到服务端,服务端先生成一条充值记录,但是状态为:未支付;然后把这个订单id发给前端,前端在支付完成的时候,会收到苹果的支付凭证,将此凭证和订单id回传给服务端,订单id的作用是用来确定是哪一笔,支付凭证是拿来校验是否支付成功
    2023-08-08
  • php获取数组长度的方法(有实例)

    php获取数组长度的方法(有实例)

    php获取数组长度的方法,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度,还有获取二维数组的方法。
    2013-10-10
  • 基于Laravel实现的用户动态模块开发

    基于Laravel实现的用户动态模块开发

    这篇文章主要给大家介绍了关于基于Laravel实现的用户动态模块开发的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 使用PHPCMS搭建wap手机网站

    使用PHPCMS搭建wap手机网站

    PHPCMS搭建PC端网站比较方便,但是在wap手机端方面却不怎么实用,而且自带的手机建站感觉不是很好,而且模版不好控制,现在对其进行修改,手机建站个人感觉比较方便。本文给大家介绍使用PHPCMS搭建wap手机网站,需要的朋友可以参考下
    2015-09-09
  • phpMyAdmin自动登录和取消自动登录的配置方法

    phpMyAdmin自动登录和取消自动登录的配置方法

    这篇文章主要介绍了phpMyAdmin自动登录和取消自动登录的配置方法,需要的朋友可以参考下
    2014-05-05
  • laravel5.1框架基础之Blade模板继承简单使用方法分析

    laravel5.1框架基础之Blade模板继承简单使用方法分析

    这篇文章主要介绍了laravel5.1框架基础之Blade模板继承简单使用方法,结合实例形式分析了laravel5.1框架模板继承原理、实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-09-09
  • php调用dll的实例操作动画与代码分享

    php调用dll的实例操作动画与代码分享

    这是我录制的一个gif操作动画,图片比较大,如果大家在线看图感觉不流畅的话可以把图片保存到本机再看
    2012-08-08
  • php在线代理转向代码

    php在线代理转向代码

    这个代码不是自己实现代理的功能 只是将输入的Url进行简单的处理之后转向一个代理网站,速度不错
    2012-05-05
  • PHP按行读取文件时删除换行符的3种方法

    PHP按行读取文件时删除换行符的3种方法

    这篇文章主要介绍了PHP按行读取文件时删除换行符的3种方法,需要的朋友可以参考下
    2014-05-05
  • Thinkphp5+PHPExcel实现批量上传表格数据功能

    Thinkphp5+PHPExcel实现批量上传表格数据功能

    这篇文章主要介绍了Thinkphp5+PHPExcel实现批量上传表格数据功能,需要的朋友可以参考下
    2017-11-11

最新评论