ホームページ >バックエンド開発 >PHPチュートリアル >php memcached mysql開発の詳細な例_PHPチュートリアル
php チュートリアル memcached mysql チュートリアル 開発の詳細な例
Memcached の作業方法
以下の部分では、読者は memcached のソース コードのコピーを準備するのが最善です。
Memcached は、起動時に -d パラメーターを使用すると、デーモン プロセスとして実行される従来のネットワーク サービス プログラムです。デーモンプロセスの作成は daemon.c によって完了します。このプログラムにはデーモン関数が 1 つだけあります。この関数は非常に単純です (特別な指示がない場合、コードは 1.2.1 に従うものとします):
private function memConnect($serkey){CODE:
#include
#include
#includeint
daemon(nochdir, noclose)
int nochdir, noclose;
{
int fd;スイッチ (fork()) {
(void)dup2 (fd, STDIN_FILENO);
case -1:
return ;
if (!nochdir)
(void)chdir(”/”);
if (!noclose && (fd = open(”/dev/) null”, O_RDWR, 0)) != -1) {(void)dup2(fd, STDOUT_FILENO);
if ( fd > STDERR_FILENO)
(void)dup2(fd, STDERR_FILENO);(void)close( fd);
return ( 0);
}}
public $pflag=''; // memcached pconnect タグ
この関数がプロセス全体をフォークした後、親プロセスが終了し、STDIN、STDOUT、および STDERR を次の場所に再配置します。空のデバイスがあれば、デーモンは正常に確立されます。
class Memcached
{
private $mem;
require 'config.php'; $memcached;
$this->mem = 新しい Memcache;$link = 'connect' : 'pconnect' ; $serkey][0],$server[$serkey][1]) または $this->errordie('memcached connect error')if(mysqli_connect_errno()){
}
public function set($ser_key,$values,$flag='') ,$expire=''){
$this->memConnect($this->tag($ser_key))
if($this->mem->set($ser_key,$values,$flag); ,$expire)) true を返す;
else を返す;
}
パブリック関数 get($ser_key){
$this->memConnect($this->tag($ser_key)); $this->mem->get($ser_key)) return $var;
else return false
}
プライベート関数 tag($ser_key){
$tag=explode('_',$ser_key); return $tag[0];
プライベート関数 errordie($errmsg){
die($errmsg)
}
クラス Mysql
{
private $mysqlmaster;
プライベート$myssqlslave;
private static $auid=0;
public function __construct(){
$msg = $mysql;
$this->mysqlimaster($msg['master '][0],$msg['master'][1],$msg['master'][2],$msg['master'][3]); //マスター mysql
$this-> mysqlslave = $this->autotranscat($msg); // スレーブ mysql
printf("接続失敗: %sn",mysqli_connect_error());
if (!$this->mysqlmaster->set_charset("latin1") && !$this->mysqlslave->set_charset("latin1")){exit("set charset error")}
public function mquery($sql){ //更新を挿入
}
プライベート関数 autotranscat($mysql){
session_start();
$_SESSION['SID']!=0 || $_SESSION['SID'] = 0 ; count($mysql)-1) $_SESSION['SID'] = 1;
else $_SESSION['SID']++
$key = 'slave_'.$_SESSION['SID']; _SESSION['SID']);
return new mysqli($mysql[$key][0],$mysql[$key][1],$mysql[$key][2],$mysql[$key][ 3]);
}if(!$this->mysqlmaster->query($sql)){
return false; squery($sql){
if($result=$this->mysqlslave->query($sql)){
return $result;
}else{
return false}
public function fetArray ($sql){
if($result=$this->squery($sql)){
while($row=$result->fetch_array(MYSQLI_ASSOC)){
$resultraa[] = $row; };
$resultaa を返します
}
}
}
?>
require 'init.php';
$mem = 新しい Memcached;
echo($mem->get('en_xx'));
$mem->set('cn_jjyy','wokao');
echo($mem->get('cn_jjyy'));
*/
$sq = 新しい MySQL に挿入します。 mybb(pid) 値(200)";
$mdsql = md5($sql);
if(!$result=$mem->get('cn_'.$mdsql)){
$sq->mquery ("insert into mybb(pid) names(200)"); //メインの mysql に挿入
$result = $sq->fetArray("select * from mybb") //クエリは mysql からのものです
foreach( $ result as $var){
echo $var['pid']
}
$mem->set('cn_'.$mdsql,$result); // cn
という名前のmemcachedサーバーに追加します{
foreach($result as $var){
echo $var['pid'];
}
}
?>
$memcached = array( // memcached をさらに使用しますプロセスは複数の memcached サーバーをシミュレートします。 cn en はメモリ サーバー名
'cn'=>array('192.168.254.144',11211),3、 LIMIT パラメータ
'en'=>array('192.168.254.144',11212)
) ;
$mysql = array( // mysql マスタースレーブ 私の環境は次のとおりです: xp マスター linux スレーブ mysql 5 php5
'マスター'=>array('192.168.254.213','root','1','mydz' ),
'slave_1'=>array('192.168.254.144','root','1','mydz') //複数のスレーブサーバーを柔軟に追加できます
?>起動プロセスの場合、memcached.c の main 関数内のシーケンスは次のとおりです。
1、settings_init() を呼び出して初期化パラメーターを設定します
2、起動コマンドからパラメーターを読み取って設定値を設定します
4. ネットワーク ソケットの監視を開始します (ソケットパスが存在しない場合) (UDP モードは 1.2 以降でサポートされます)
5. ユーザー ID を確認します (Memcached ではルート ID の開始が許可されません)6. ソケットパスが存在する場合は、UNIX を開きます。ローカル接続 (Sock パイプ)
7. -d モードで開始した場合、デーモン プロセスを作成します (上記のようにデーモン関数を呼び出します)
8、アイテム、イベント、ステータス情報、ハッシュ、接続、スラブを初期化します
9.設定に影響を与え、バケット配列を作成します
10. メモリページをロックします
11、シグナルを初期化、接続、キューを削除します
12、デーモンモードの場合、プロセスIDを処理します
13、イベントが開始され、起動プロセスが終了します、そして main 関数がループに入ります。
デーモンモードでは、標準エラー出力がブラックホールに向けられているため、実行中に目に見えるエラー情報はフィードバックされません。
memcached.c のメインループ関数は drive_machine で、渡されるパラメーターは現在の接続を指す構造体ポインターであり、アクションは状態メンバーの状態に基づいて決定されます。
に統一されています
http://www.bkjia.com/PHPjc/444946.html