ホームページ >バックエンド開発 >PHPチュートリアル >【オリジナル】複数memcachedとmysqlマスタースレーブ環境でのPHP開発:詳細コード解説_PHPチュートリアル

【オリジナル】複数memcachedとmysqlマスタースレーブ環境でのPHP開発:詳細コード解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:38:04806ブラウズ

今日はこの会社での最後の日です

そこで、大規模なウェブサイトではメモリをデータベースとして使用するのが常です。 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 ]

これは使用程序です。   看下就大概明白了。
大站就差不多是这样实现的了。   この雑誌は似乎 ただ有我発信了。    献丑了

www.bkjia.com本当http://www.bkjia.com/PHPjc/735128.html技術記事 4点了。今天は最後の一天在这间公司。心情不是很好。 所以写下东西播放下。 一般的な大局は通常行われている方法であり、着内存当データ库来用( memcached )です。 日本語良い读...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。