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

发布时间 - 2026-01-11 00:09:06    点击率:

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  # mysql  # 读写分离  # php实现mysql读写分离  # Springboot + Mysql8实现读写分离功能  # springboot基于Mybatis mysql实现读写分离  # 基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作  # PHP实现的mysql读写分离操作示例  # mysql主从复制读写分离的配置方法详解  # 利用mycat实现mysql数据库读写分离的示例  # Mysql读写分离过期常用解决方案  # 还可以  # 如果不是  # 查询结果  # 写过  # 大家多多  # gt  # slave  # dsn  # slave_select  # trim  # strtolower  # select  # substr  # master  # ip  # array  # slave_ip  # slave_server  # get_slave_ip  # master_change 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python正则表达式进阶教程_复杂匹配与分组替换解析  Python高阶函数应用_函数作为参数说明【指导】  如何快速搭建安全的FTP站点?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  如何在宝塔面板中修改默认建站目录?  Laravel如何使用Service Container和依赖注入?(代码示例)  如何快速搭建自助建站会员专属系统?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  香港服务器租用费用高吗?如何避免常见误区?  Laravel如何配置任务调度?(Cron Job示例)  如何在IIS管理器中快速创建并配置网站?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel如何使用模型观察者?(Observer代码示例)  深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Linux系统命令中tree命令详解  如何在阿里云服务器自主搭建网站?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  微信推文制作网站有哪些,怎么做微信推文,急?  如何在阿里云虚拟服务器快速搭建网站?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  php 三元运算符实例详细介绍  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  在线制作视频网站免费,都有哪些好的动漫网站?  Laravel storage目录权限问题_Laravel文件写入权限设置  焦点电影公司作品,电影焦点结局是什么?  Android 常见的图片加载框架详细介绍  北京网站制作的公司有哪些,北京白云观官方网站?  高防服务器租用指南:配置选择与快速部署攻略  如何安全更换建站之星模板并保留数据?  java获取注册ip实例  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel如何处理表单验证?(Requests代码示例)  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何在阿里云部署织梦网站?  微信公众帐号开发教程之图文消息全攻略  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】