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


相关推荐: Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  香港服务器WordPress建站指南:SEO优化与高效部署策略  奇安信“盘古石”团队突破 iOS 26.1 提权  再谈Python中的字符串与字符编码(推荐)  如何将凡科建站内容保存为本地文件?  如何在万网ECS上快速搭建专属网站?  Python文件异常处理策略_健壮性说明【指导】  如何用PHP快速搭建CMS系统?  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  如何在服务器上三步完成建站并提升流量?  Laravel如何优化应用性能?(缓存和优化命令)  Laravel如何处理表单验证?(Requests代码示例)  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  如何快速配置高效服务器建站软件?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  历史网站制作软件,华为如何找回被删除的网站?  如何在阿里云通过域名搭建网站?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  高端建站如何打造兼具美学与转化的品牌官网?  微信小程序 input输入框控件详解及实例(多种示例)  原生JS实现图片轮播切换效果  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  公司网站制作价格怎么算,公司办个官网需要多少钱?  Python进程池调度策略_任务分发说明【指导】  如何在IIS中配置站点IP、端口及主机头?  如何在新浪SAE免费搭建个人博客?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  如何在香港免费服务器上快速搭建网站?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel如何集成Inertia.js与Vue/React?(安装配置)  js实现点击每个li节点,都弹出其文本值及修改  浅谈redis在项目中的应用  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何在橙子建站上传落地页?操作指南详解  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  浅述节点的创建及常见功能的实现  Laravel怎么为数据库表字段添加索引以优化查询  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  JS碰撞运动实现方法详解  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  网站优化排名时,需要考虑哪些问题呢?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  深入理解Android中的xmlns:tools属性  利用vue写todolist单页应用