一般的大站通常做法是:拿着内存当数据库来用(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 从;mysql 5 php5 ''master''=>array(''192.168.254.213'',''root'',''1'',''mydz''), ''slave_1''=>array(''192.168.254.144'',''root'',''1'',''mydz'') //可以灵活添加多台从服务器 ); ?>
|
服务器配置文件: 十分方便的切换主从,当主换了,从可以迅速切换为主,支持多从服务器。
<?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);&nbs |