memcached和mysql主从环境下PHP开发_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

memcached和mysql主从环境下PHP开发

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:开发环境'this->
黑客防线网安网讯:  一般的大站通常做法是:拿着内存当数据库来用(memcached),以及很好的读、写分离,备份机制(mysql的主从)。    在这样的环境下我们怎么进行PHP开发呢?    刚在linux的VIM里使用...
  一般的大站通常做法是:拿着内存当数据库来用(memcached)以及很好的读、写分离备份机制(mysql的主从)
  
  在这样的环境下我们怎么进行PHP开发呢?
  
  刚在linux的VIM里使用PHP5写的一个demo调试通过
  
  <?php
  
  $memcached=array(//用memcached的多进程模拟多台memcached服务器cn、en为内存服务器
  
  'cn'=>array('192.168.254.144',11211),
  
  'en'=>array('192.168.254.144',11212)
  
  );
  
  $mysql=array(//mysql的主从我的环境是:xp主,linux从;mysql5php5
  
  'master'=>array('192.168.254.213','root','1','mydz'),
  
  'slave_1'=>array('192.168.254.144','root','1','mydz')//可以灵活添加多台从服务器
  
  );
  
  ?>
  
  服务器配置文件:十分方便的切换主从,当主换了,从可以迅速切换为主,支持多从服务器。
  
  <?php
  
  classMemcached
  
  {
  
  private$mem;
  
  public$pflag='';//memcachedpconnecttag
  
  privatefunctionmemConnect($serkey){
  
  require'config.php';
  
  $server=$memcached;
  
  $this->mem=newMemcache;
  
  $link=!$this->pflag?'connect':'pconnect';
  
  $this->mem->$link($server[$serkey][0],$server[$serkey][1])or$this->errordie('memcachedconnecterror');
  
  }
  
  publicfunctionset($ser_key,$values,$flag='',$expire=''){
  
  $this->memConnect($this->tag($ser_key));
  
  if($this->mem->set($ser_key,$values,$flag,$expire))returntrue;
  
  elsereturnfalse;
  
  }
  
  publicfunctionget($ser_key){
  
  $this->memConnect($this->tag($ser_key));
  
  if($var=$this->mem->get($ser_key))return$var;
  
  elsereturnfalse;
  
  }
  
  privatefunctiontag($ser_key){
  
  $tag=explode('_',$ser_key);
  
  return$tag[0];
  
  }
  
  privatefunctionerrordie($errmsg){
  
  die($errmsg);
  
  }
  
  }
  
  ?>
  
  简单的封装了memcached的操作。
  
  在memcached的多服务器上我的实现思路是这样的:在把信息添加到内存服务器的时候.我选择了手工设置添加到那个服务器.而不用传统的根据ID自动分配。这样可以更灵活点。
  
  以内存服务器名为表示比如存$arr这个信息到en这台内存服务器我就这样写$mem->set('en_'.$arr);明白了吧。
  
  <?php
  
  classMysql
  
  {
  
  private$mysqlmaster;
  
  private$myssqlslave;
  
  privatestatic$auid=0;
  
  publicfunction__construct(){
  
  require'config.php';
  
  $msg=$mysql;
  
  $this->mysqlmaster=newmysqli($msg['master'][0],$msg['master'][1],$msg['master'][2],$msg['master'][3]);//mastermysql
  
  $this->mysqlslave=$this->autotranscat($msg);//slavemysql
  
  if(mysqli_connect_errno()){
  
  printf("Connectfailed:%s ",mysqli_connect_error());
  
  exit();
  
  }
  
  if(!$this->mysqlmaster->set_charset("latin1")&&!$this->mysqlslave->set_charset("latin1")){
  
  exit("setcharseterror");
  
  }
  
  }
  
  privatefunctionautotranscat($mysql){
  
  session_start();
  
  $_SESSION['SID']!=0||$_SESSION['SID']=0;
  
  if($_SESSION['SID']>=count($mysql)-1)$_SESSION['SID']=1;
  
  else$_SESSION['SID']++;
  
  $key='slave_'.$_SESSION['SID'];
  
  echo($_SESSION['SID']);
  
  returnnewmysqli($mysql[$key][0],$mysql[$key][1],$mysql[$key][2],$mysql[$key][3]);
  
  }
  
  publicfunctionmquery($sql){//insertupdate
  
  if(!$this->mysqlmaster->query($sql)){
  
  returnfalse;
  
  }
  
  }
  
  publicfunctionsquery($sql){
  
  if($result=$this->mysqlslave->query($sql)){
  
  return$result;
  
  }else{
  
  returnfalse;
  
  };
  
  }
  
  publicfunctionfetArray($sql){
  
  if($result=$this->squery($sql)){
  
  while($row=$result->fetch_array(MYSQLI_ASSOC)){
  
  $resultraa[]=$row;
  
  };
  
  return$resultraa;
  
  }
  
  }
  
  }
  
  ?>
  
  这个是mysqli的封装.也就是读从写主的操作的封装。
  
  <?php
  
  require'init.php';
  
  $mem=newMemcached;
  
  /*$mem->set('en_xx','bucuo');
  
  echo($mem->get('en_xx'));
  
  $mem->set('cn_jjyy','wokao');
  
  echo($mem->get('cn_jjyy'));
  
  */
  
  $sq=newMysql;
  
  $sql="insertintomybb(pid)values(200)";
  
  $mdsql=md5($sql);
  
  if(!$result=$mem->get('cn_'.$mdsql)){
  
  $sq->mquery("insertintomybb(pid)values(200)");//插入到主mysql
  
  $result=$sq->fetArray("select*frommybb");//查询是从mysql
  
  foreach($resultas$var){
  
  echo$var['pid'];
  
  }
  
  $mem->set('cn_'.$mdsql,$result);//添加到名为cn的memcached服务器
  
  }else{
  
  foreach($resultas$var){
  
  echo$var['pid'];
  
  }
  
  }
  
  ?>
  
  这个是使用程序,大站就差不多是这样实现的了。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17671-1.html
网站维护教程更新时间:2012-09-21 05:23:25  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer