当前位置:Gxlcms > PHP教程 > PHP+MYSQL实现读写分离实战详解

PHP+MYSQL实现读写分离实战详解

时间:2021-07-01 10:21:17 帮助过:26人阅读

本篇文章主要介绍了PHP+MYSQL实现读写分离,实例分析了读写分离的技巧,从而提高数据库的负载能力,具有一定的参考价值,有兴趣的可以了解一下。

1、Introduction

之前写过2篇文章,分别是:

Mysql主从同步的原理

Myql主从同步实战

基于此,我们再实现简单的PHP+Mysql读写分离,从而提高数据库的负载能力。

2、代码实战

  1. <?php
  2. class Db
  3. {
  4. private $res;
  5. function __construct($sql)
  6. {
  7. $querystr = strtolower(trim(substr($sql,0,6)));
  8. //如果是select,就连接slave服务器
  9. if($querystr == 'select')
  10. {
  11. $res=$this->slave_select($sql);
  12. $this->res=$res;
  13. }
  14. //如果不是select,就连接master服务器
  15. else
  16. {
  17. $res=$this->master_change($sql);
  18. $this->res=$res;
  19. }
  20. }
  21. /**
  22. * slave从库返回sql查询结果
  23. * @param $sql
  24. * @return array
  25. */
  26. private function slave_select($sql){
  27. //该处只是随机获取slave节点的ip,当然,还可以采用其他算法获取slave_ip
  28. $slave_server=$this->get_slave_ip();
  29. $dsn="mysql:host=$slave_server;dbname=test";
  30. $user='root';
  31. $pass='123456';
  32. $dbh=new PDO($dsn, $user, $pass);
  33. return $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  34. }
  35. /**master主库返回sql执行结果
  36. * @param $sql
  37. * @return int
  38. */
  39. private function master_change($sql){
  40. $master_server='192.168.33.22';
  41. $dsn="mysql:host=$master_server;dbname=test";
  42. $user='root';
  43. $pass='123456';
  44. $dbh=new PDO($dsn, $user, $pass);
  45. return $dbh->exec($sql);
  46. }
  47. /**
  48. * 随机获取slave-ip
  49. * @return mixed
  50. */
  51. private function get_slave_ip(){
  52. $slave_ips=['192.168.33.33','192.168.33.44'];
  53. $count=count($slave_ips)-1;
  54. $random_key=mt_rand(0,$count);
  55. return $slave_ips[$random_key];
  56. }
  57. /**
  58. * 获取结果
  59. * @return int
  60. */
  61. public function get_res(){
  62. return $this->res;
  63. }
  64. }
  65. $sql1 = "select * from t1";
  66. $sql2 = "insert into t1 (name) values ('haha')";
  67. $sql3 = "delete from t1 where id=1";
  68. $sql4 = "update t1 set name='Jerry' where id=2";
  69. $db = new Db($sql1);
  70. //$db = new Db($sql2);
  71. //$db = new Db($sql3);
  72. //$db = new Db($sql4);
  73. var_dump($db->get_res());

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


相关推荐:

php实现连接mysql数据库的方法

使用wordpress的$wpdb类读mysql数据库做ajax时出现的问题该如何解决

php mysql_list_dbs()函数的用法详解

以上就是PHP+MYSQL实现读写分离实战详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行