Heim > Datenbank > MySQL-Tutorial > Detaillierte Erläuterung des PHP-Entwicklungscodes in Memcached- und MySQL-Master-Slave-Umgebungen

Detaillierte Erläuterung des PHP-Entwicklungscodes in Memcached- und MySQL-Master-Slave-Umgebungen

黄舟
Freigeben: 2016-12-14 15:28:57
Original
1015 Leute haben es durchsucht

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
);

Serverkonfigurationsdatei: sehr praktisch Wechseln Sie den Master-Slave. Wenn der Master wechselt, kann der Slave schnell zum Master wechseln.

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->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: %sn",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']!=0 ||. $_SESSION['SID'] =0;
if($_SESSION['SID'] >=count($mysql)-1) $_SESSION['SID'] = 1; _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){ //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). )!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage