ホームページ >バックエンド開発 >PHPチュートリアル >【オリジナル】複数memcachedとmysqlマスタースレーブ環境でのPHP開発:詳細コード解説_PHPチュートリアル
今日はこの会社での最後の日です
そこで、大規模なウェブサイトではメモリをデータベースとして使用するのが常です。 memcached) そして、優れた読み取りと書き込みの分離バックアップメカニズム (mysql のマスター/スレーブ)
そのような環境で PHP を開発するにはどうすればよいか、私は話す方法がわからないので、コードを投稿するだけです。
Linux の VIM で書いたところですが、デモの 1 つはデバッグに合格しました。PHP5 で書いていると、遅れていると言われるのではないかと心配しています。 PHP4.多 複数の
Memcached
サーバーのマルチプロセスシミュレーション CN ENはメモリサーバー名です 'cn' = & gt; Array ('192.168.254.144', 11211), 'en' = & gt; ('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') //複数のスレーブサーバーを柔軟に追加できます );? > サーバー設定ファイル: マスターとスレーブを切り替えると、スレーブは複数のスレーブ サーバーにすばやく切り替えることができます。 ?phpclass Memcached{
private $mem;
public $pflag=''; //
memcached
pconnect タグ
private function memConnect($serkey){
require 'config.php';
$server = $
memcached
;
$this->mem = 新しい Memcache;
$link = !$this->pflag ? 'connect' : 'pconnect' ;
$this->mem->$link ($server[$serkey][0],$server[$serkey][1]) または $this->errordie('
memcached接続エラー');
}
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 } プライベート関数タグ($ser_key){
$tag= explode('_',$ser_key);
return $tag[0];
}
プライベート関数 errordie($errmsg){
die($errmsg);
}
}
?>
[/php]
は単に
memcached
の操作をカプセル化したものです。詳しく説明する時間はあまりありません。
memcached
のマルチサーバー上での実装アイデアは次のとおりです。
これは、メモリ サーバーの名前によって表されます。 $arr の情報をメモリサーバーに保存します。en、次のように書きます $mem->set ('en_'.$arr); わかりました
[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]); //マスター mysql
$this->mysqlslave = $this->autotranscat($msg); // スレーブ mysql
if(mysqli_connect_errno()){
printf("接続失敗: %sn",mysqli_connect_error());
exit ();
}
if(!$this->mysqlmaster->set_charset(" latin1") && !$this->mysqlslave->set_charset("latin1")){
exit("set charset エラー");
}
}
プライベート関数 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) )){
$result を返します。
}else{
return false;
};
}
public function fetArray($sql){
if($result=$this->squery($sql)){
while($row=$result-> ;fetch_array(MYSQLI_ASSOC)){
$resultraa[] = $row;
};
return $resultraa;
}
}
}
?>
[/php]
これは mysqli のパッケージです。 也就是 读 从 写 主 的操作の封入.
[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 = 新しい Mysql;
$sql = "mybb(pid) 値 (200) に挿入";
$mdsql = md5($sql);
if(!$result=$mem ->get('cn_'.$mdsql)){
$sq->mquery("mybb(pid) 値に挿入(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'];
}
}
?>
[/php ]
これは使用程序です。 看下就大概明白了。
大站就差不多是这样实现的了。 この雑誌は似乎 ただ有我発信了。 献丑了