多memcached和mysql主从环境下PHP开发

hao508506 贡献于2013-11-02

作者 Jacky  创建于2010-05-19 08:01:00   修改者User  修改于2012-12-22 21:13:00字数3031

文档摘要:一般的大站通常做法是 拿着内存当数据库来用(memcached)和很好的读  写分离  备份机制(mysql的主从)在这样的环境下进行PHP服务器配置文件:十分方便的切换主从.  当主坏了  从可以迅速切换为主. 
关键词:

多memcached 和 mysql 主从 环境下PHP开发 一般的大站通常做法是 拿着内存当数据库来用(memcached)和很好的读  写分离  备份机制 (mysql 的主从) 在这样的环境下进行PHP 服务器配置文件: 十分方便的 切换主从.  当主坏了  从可以迅速切换为主.  支持 多从服务器   . array('192.168.254.144',11211),      'en'=>array('192.168.254.144',11212)      ); // mysql 的主从 $mysql = array(       'master'=>array('192.168.254.213','root','1','mydz'),      'slave_1'=>array('192.168.254.144','root','1','mydz')  //可以灵活添加多台从服务器      ); ?> 简单的封装了 memcached  的操作. 在memcached 的多服务器上.  我的实现思路是这样的:   在把信息添加到 内存服务器的时候手工设置添加到那个服务器.而不用传统的根据ID自动分配.这样可以更灵活点.   以内存服务器名 为标示   比如 存  $arr 这个信息到  en 这台 内存服务器写   $mem->set('en_'.$arr);  mem = new Memcache;    $link = !$this->pflag ? 'connect' : 'pconnect' ; $this->mem->$link($server[$serkey][0],$server[$serkey][1]) or $this->errordie('memcached connect error'); } public function set($ser_key,$values,$flag='',$expire=''){    $this->memConnect($this->tag($ser_key));    if($this->mem->set($ser_key,$values,$flag,$expire)) return true;    else return false; }  public function get($ser_key){     $this->memConnect($this->tag($ser_key));    if($var=$this->mem->get($ser_key)) return $var;    else return false;  }  private function tag($ser_key){    $tag=explode('_',$ser_key);    return $tag[0]; } private function errordie($errmsg){    die($errmsg); } } ?> 这个是 mysqli 的封装.  也就是   读  从  写 主  的操作的封装. mysqlmaster = new mysqli($msg['master'][0],$msg['master'][1],$msg['master'][2],$msg['master'][3]); //master mysql     $this->mysqlslave  = $this->autotranscat($msg); // slave mysql    if(mysqli_connect_errno()){     printf("Connect failed: %s\n",mysqli_connect_error());     exit();    }    if(!$this->mysqlmaster->set_charset("latin1") && !$this->mysqlslave->set_charset("latin1")){     exit("set charset error");    } } private function autotranscat($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']);   return new mysqli($mysql[$key][0],$mysql[$key][1],$mysql[$key][2],$mysql[$key][3]); } public function mquery($sql){ //insert  update    if(!$this->mysqlmaster->query($sql)){    return false;   } } public function squery($sql){   if($result=$this->mysqlslave->query($sql)){    return $result;    }else{    return false;   }; } public function fetArray($sql){   if($result=$this->squery($sql)){    while($row=$result->fetch_array(MYSQLI_ASSOC)){     $resultraa[] = $row;    };    return $resultraa;   } } } ?> 这个是使用程序.  set('en_xx','bucuo'); echo($mem->get('en_xx')); $mem->set('cn_jjyy','wokao'); echo($mem->get('cn_jjyy')); */  $sq = new Mysql; $sql = "insert into mybb(pid) values(200)"; $mdsql = md5($sql); if(!$result=$mem->get('cn_'.$mdsql)){   $sq->mquery("insert into mybb(pid) values(200)"); //插入到主mysql   $result = $sq->fetArray("select * from mybb"); //查询 是 从mysql   foreach($result as $var){    echo $var['pid'];   }   $mem->set('cn_'.$mdsql,$result); //添加到 名为 cn 的 memcached 服务器   }else{   foreach($result as $var){    echo $var['pid'];   } } ?> 大站就差不多是这样实现的了。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档