Die übliche Praxis für große Websites besteht darin, Speicher als Datenbank (Memcached) zu verwenden. Wie können wir PHP in einer solchen Umgebung mit einem guten Lese-/Schreib-Trennungs-Backup-Mechanismus (MySQL-Master-Slave) entwickeln?
$memcached = array( //Memcached-Multiprozess verwenden, um mehrere Memcached-Server zu simulieren. cn en ist der Name des Speicherservers
'cn'=>array(' 192.168.254.144',11211),
'en'=>array('192.168.254.144',11212)
);
$mysql = array( // Die Master-Slave-Umgebung von MySQL ist : XP Master Linux von MySQL 5 PHP5
'master'=>array('192.168.254.213','root','1','mydz'),
'slave_1'=>array(' 192.168.254.144','root','1','mydz') //Sie können flexibel mehrere Slave-Server hinzufügen
);
Kopieren Sie den Code wie folgt:
Klasse Memcached
{
private $mem;
public $pflag=''; // memcached pconnect tag
private function memConnect($serkey){
require 'config.php'; >$server = $memcached;
$this->mem = new Memcache ? mem->$link($ server[$serkey][0],$server[$serkey][1]) oder $this->errordie('memcached connect error');
}
public function set($ser_key,$values ,$flag='',$expire=''){
$this->memConnect($this->tag($ser_key)); 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); 🎜>private function errordie($errmsg ;
Auf mehreren zwischengespeicherten Servern. Meine Implementierungsidee ist wie folgt: Beim Hinzufügen von Informationen zum Speicherserver habe ich mich dafür entschieden, sie manuell so einzustellen, dass sie diesem Server hinzugefügt werden, anstatt die herkömmliche automatische Zuordnung zu verwenden auf ID.
Dies kann flexibler sein
Wenn ich beispielsweise den Namen des Speicherservers verwende, um $arr-Informationen auf dem en-Speicherserver zu speichern, würde ich $mem->set('en_) schreiben. '.$arr); Verstehen Sie
Kopieren Sie den Code wie folgt:
class Mysql
{
private $mysqlmaster;
private static $auid= 0;
public function __construct( ){
require 'config.php';
$msg = $mysql;
$this ->mysqlslave = $this-> ;autotranscat($msg); // Slave mysql
if(mysqli_connect_errno()){
printf("Connect failed: %sn",mysqli_connect_error()); >exit();
}
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; _SESSION['SID']++;
$key = 'slave_'.$_SESSION['SID'];
echo($_SESSION['SID']);
}
public function mquery( $sql){ //Update einfügen
if(!$this->mysqlmaster->query($sql)){
return false;
}
}
public function query ($sql){
if ($result=$this->mysqlslave->query($sql)){
return $result;
}else{
return false; >};
}
öffentliche Funktion fetArray($sql){
if($result=$this->squery($sql)){
while($row=$result-> ;fetch_array(MYSQLI_ASSOC)){
$resultraa[] = $row;
};
return $resultraa;
}
}
?>
Dies ist ein Paket von MySQL. Das heißt, die Kapselung des Lesevorgangs vom Slave und des Schreibens zum Master.
require 'init.php';
$mem = new Memcached
/* $mem->set('en_xx','bucuo'); get('en_xx'));
$mem->set('cn_jjyy','wokao');
echo($mem->get('cn_jjyy'));
$sql = new Mysql;
$sql = "insert into mybb(pid) effects(200)";
$mdsql = md5($sql);
if(!$result=$ mem->get('cn_'.$mdsql)){
$sq->mquery("insert into mybb(pid) Values(200)"); //In Haupt-MySQL einfügen
$result = $sq->fetArray("select * from mybb"); //Die Abfrage stammt von mysql
foreach($result as $var){
echo $var['pid']; }
$mem->set('cn_'.$mdsql,$result); //Zum zwischengespeicherten Server mit dem Namen cn hinzufügen
}else{
foreach($result as $var){
echo $var['pid'];
}
}
?>
Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn). )!