多memcached 和 mysql 主从 环境下PHP开发: 代码详解
广告投放★自助友情CMS落伍广告联盟晒乐广告联盟脉动广告联盟品味广告联盟
广告位可自定样式联系QQ:4285248个文字广告月20元广告联系QQ:428524广告位可自定样式
8个文字广告月20元黄金广告位每月20元广告位可自定样式联系QQ:428524广告位可自定样式
左旋肉碱、全国包邮
买二送一、无效退款

文章浏览→编程相关Mysql→多memcached 和 mysql 主从 环境下PHP开发: 代码详解

多memcached 和 mysql 主从 环境下PHP开发: 代码详解
多memcached 和 mysql 主从 情况下PHP开辟: 代码详解

一般的大站通常做法是 拿着内存当数据库来用(memcached).和很好的读 写分离 备份机制 (mysql 的主从)
在这样的环境下我们怎么进行PHP开发呢.

 

PHP代码
  1. <?php  
  2. $memcached array//用memcached 的 多 进程模拟 多台memcached 服务器 cn en 为 内存服务器名   
  3. ’cn’=>array(’192.168.254.144’,11211),   
  4. ’en’=>array(’192.168.254.144’,11212)   
  5. );   
  6. $mysql array// mysql 的主从 我的环境是 : xp 主 linux 从 mysql php5   
  7. ’master’=>array(’192.168.254.213’,’root’,’1’,’mydz’),   
  8. ’slave_1’=>array(’192.168.254.144’,’root’,’1’,’mydz’) //可以灵活添加多台从服务器   
  9. );   
  10. ?>   

 

服务器配置文件: 十分方便的 切换主从. 当主换了从可以迅速切换为主. 支持 多从服务器 .

 

PHP代码
  1. <?php  
  2. class Memcached   
  3.   
  4. private $mem  
  5. public $pflag=’’; // memcached pconnect tag   
  6. private function memConnect($serkey){   
  7. require ’config.php’;   
  8. $server $memcached  
  9. $this->mem new Memcache;   
  10. $link !$this->pflag ’connect’ ’pconnect’   
  11. $this->mem->$link($server[$serkey][0],$server[$serkey][1]) or $this->errordie(’memcached connect error’);   
  12.   
  13. public function set($ser_key,$values,$flag=’’,$expire=’’){   
  14. $this->memConnect($this->tag($ser_key));   
  15. if($this->mem->set($ser_key,$values,$flag,$expire)) return true;   
  16. else return false;   
  17.   
  18. public function get($ser_key){   
  19. $this->memConnect($this->tag($ser_key));   
  20. if($var=$this->mem->get($ser_key)) return $var  
  21. else return false;   
  22.   
  23. private function tag($ser_key){   
  24. $tag=explode(’_’,$ser_key);   
  25. return $tag[0];   
  26.   
  27. private function errordie($errmsg){   
  28. die($errmsg);   
  29.   
  30.   
  31. ?>   

 

简单的封装了 memcached 的操作.详细的时间不多.我要离开公司了
在memcached 的多服务器上. 我的实现思路是这样的: 在把信息添加到内存服务器的时候.我选择了手工设置添加到那个服务器.而不用传统的根据ID自动分配.
这样可以更灵活点.
以内存服务器名 为表示 比如 存 $arr 这个信息到 en 这台 内存服务器 我就这样写$mem->set(’en_’.$arr);明白了吧 

PHP代码
  1. class Mysql   
  2.   
  3. private $mysqlmaster  
  4. private $myssqlslave  
  5. private static $auid=0;   
  6. public function __construct(){   
  7. require ’config.php’;   
  8. $msg $mysql  
  9.   
  10. $this->mysqlmaster new mysqli($msg[’master’][0],$msg[’master’][1],$msg[’master’][2],$msg[’master’][3]); //master mysql   
  11. $this->mysqlslave $this->autotranscat($msg); // slave mysql   
  12. if(mysqli_connect_errno()){   
  13. printf("Connect failed: %s\n",mysqli_connect_error());   
  14. exit();   
  15.   
  16. if(!$this->mysqlmaster->set_charset("latin1"&& !$this->mysqlslave->set_charset("latin1")){   
  17. exit("set charset error");   
  18.   
  19.   
  20. private function autotranscat($mysql){   
  21. session_start();   
  22. $_SESSION[’SID’]!=0 || $_SESSION[’SID’]=0   
  23. if($_SESSION[’SID’] >=count($mysql)-1) $_SESSION[’SID’] 1;   
  24. else $_SESSION[’SID’]++;   
  25. $key ’slave_’.$_SESSION[’SID’];   
  26. echo($_SESSION[’SID’]);   
  27. return new mysqli($mysql[$key][0],$mysql[$key][1],$mysql[$key][2],$mysql[$key][3]);   
  28.   
  29. public function mquery($sql){ //insert update   
  30. if(!$this->mysqlmaster->query($sql)){   
  31. return false;   
  32.   
  33.   
  34. public function squery($sql){   
  35. if($result=$this->mysqlslave->query($sql)){   
  36. return $result  
  37. }else  
  38. return false;   
  39. };   
  40.   
  41. public function fetArray($sql){   
  42. if($result=$this->squery($sql)){   
  43. while($row=$result->fetch_array(MYSQLI_ASSOC)){   
  44. $resultraa[] $row  
  45. };   
  46. return $resultraa  
  47.   
  48.   
  49.   
  50. ?>   

 

这个是 mysqli 的封装. 也就是 读 从 写 主的操作的封装.

 

PHP代码
  1. require ’init.php’;   
  2. $mem new Memcached;   
  3.    
  4. $sq new Mysql;   
  5. $sql "insert into mybb(pid) values(200)"  
  6. $mdsql md5($sql);   
  7. if(!$result=$mem->get(’cn_’.$mdsql)){   
  8. $sq->mquery("insert into mybb(pid) values(200)"); //插入到主mysql   
  9. $result $sq->fetArray("select from mybb"); //查询 是 从mysql   
  10. foreach($result as $var){   
  11. echo $var[’pid’];   
  12.   
  13. $mem->set(’cn_’.$mdsql,$result); //添加到 名为 cn 的 memcached 服务器   
  14. }else  
  15. foreach($result as $var){   
  16. echo $var[’pid’];   
  17.   
  18.   
  19. ?>   
所属分类:编程相关Mysql    作者:荡凯网络    时间:2010-6-3 14:42:00

文章导航