尚兴跃的备忘录

PHP程序员。我梦想靠自己的网站赚钱

尚兴跃ID:wssxy
10034次访问,排名10731好友4人,关注者4
我热爱WEB类的工作,热爱赚钱、学习新的WEB技术,看电影,逛街,酒吧,新事务信息~ 梦想是自己的网站有朝一日可以出人头地!
wssxy的文章
原创 34 篇
翻译 0 篇
转载 71 篇
评论 6 篇
最近评论
qpzkzp:Wow gold
wssxy:看精华就成~~~ 多余的废话是给理论派看的
qqwmly:太长了,没看完

http://www.xyking.cn
wssxy:http://tech.ddvip.com/2007-08/118814551133123.html
heiyeshuwu:算法写的不错!
文章分类
收藏
    相册
    Phper
    5dhome的PHP博客(RSS)
    CoolCode.CN
    Haohappy的专栏
    Hekey's Blog
    phpangel
    phphot
    PHP面对对象
    WoDream
    大龄青年(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 多memcached 和 mysql 主从 环境下PHP开发: 代码详解收藏

    新一篇: BerkeleyDB安装及配置 | 旧一篇: memcachedb的性能测试

    4点了.今天是最后一天在这间公司.心情不是很好.

    所以写下东西发泄下.         一般的大站通常做法是    拿着内存当数据库来用(memcached).     和很好的读  写分离  备份机制 (mysql 的主从)

    在这样的环境下我们怎么进行PHP开发呢.  本人不太会讲话.所以还是帖代码吧.  

    刚在linux  的 VIM  里写的一个  demo    调试通过.  也同时希望大家拍砖 ,  使用PHP5  写的. PHP4写出来怕大家说我落后了
    复制PHP内容到剪贴板
    PHP代码:

    <?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 从  mysql 5  php5
         
    'master'=>array('192.168.254.213','root','1','mydz'),
         
    'slave_1'=>array('192.168.254.144','root','1','mydz')  //可以灵活添加多台从服务器
         
    );
    ?>

    服务器配置文件: 十分方便的 切换主从.  当主换了  从可以迅速切换为主.  支持 多从服务器   .
    复制PHP内容到剪贴板
    PHP代码:

    <?php
    class Memcached
    {
    private 
    $mem;
    public 
    $pflag=''// memcached pconnect tag
    private function memConnect($serkey){
      require 
    'config.php';
      
    $server $memcached;
      
    $this->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);
    }
    }
    ?>

    简单的封装了 memcached  的操作. 详细的时间不多.我要离开公司了   

    在memcached 的多服务器上.  我的实现思路是这样的:   在把信息添加到 内存服务器的时候.我选择了手工设置添加到那个服务器.而不用传统的根据ID自动分配.
    这样可以更灵活点.  

    以内存服务器名 为表示   比如 存  $arr 这个信息到  en 这台 内存服务器 我就这样写   $mem->set('en_'.$arr);    明白了吧
    复制PHP内容到剪贴板
    PHP代码:

    <?php
    class Mysql
    {
    private   
    $mysqlmaster;
    private   
    $myssqlslave;
    private static 
    $auid=0;
    public function 
    __construct(){
      require 
    'config.php';
      
    $msg $mysql;
      
      
    $this->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']!=|| $_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;
      }
    }
    }
    ?>

    这个是 mysqli 的封装.  也就是   读  从  写 主  的操作的封装.
    复制PHP内容到剪贴板
    PHP代码:

    <?php
    require 'init.php';
    $mem = new Memcached;
    /* $mem->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'];
      }
    }
    ?>

    这个是使用程序.   看下就大概明白了.
    大站就差不多是这样实现的了.   这种帖似乎  只有我发了.    献丑了

    发表于 @ 2008年05月03日 21:01:56|评论(loading...)|编辑

    新一篇: BerkeleyDB安装及配置 | 旧一篇: memcachedb的性能测试

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 小陶