ホームページ >バックエンド開発 >PHPチュートリアル >php memcached mysql開発の詳細な例_PHPチュートリアル

php memcached mysql開発の詳細な例_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:07:46939ブラウズ

php チュートリアル memcached mysql チュートリアル 開発の詳細な例

Memcached の作業方法

以下の部分では、読者は memcached のソース コードのコピーを準備するのが最善です。

Memcached は、起動時に -d パラメーターを使用すると、デーモン プロセスとして実行される従来のネットワーク サービス プログラムです。デーモンプロセスの作成は daemon.c によって完了します。このプログラムにはデーモン関数が 1 つだけあります。この関数は非常に単純です (特別な指示がない場合、コードは 1.2.1 に従うものとします):

CODE:
#include
#include
#include

int
daemon(nochdir, noclose)
int nochdir, noclose;
{
int fd;

スイッチ (fork()) {
case -1:
return ;

if (!nochdir)
(void)chdir(”/”);

if (!noclose && (fd = open(”/dev/) null”, O_RDWR, 0)) != -1) {

(void)dup2 (fd, STDIN_FILENO);

(void)dup2(fd, STDOUT_FILENO);
(void)dup2(fd, STDERR_FILENO);

if ( fd > STDERR_FILENO)

(void)close( fd);
}

return ( 0);

}


この関数がプロセス全体をフォークした後、親プロセスが終了し、STDIN、STDOUT、および STDERR を次の場所に再配置します。空のデバイスがあれば、デーモンは正​​常に確立されます。

class Memcached
{
private $mem;

public $pflag=''; // memcached pconnect タグ
private function memConnect($serkey){

require 'config.php'; $memcached;

$this->mem = 新しい Memcache;

$link = 'connect' : 'pconnect' ; $serkey][0],$server[$serkey][1]) または $this->errordie('memcached connect error')
}
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
if(mysqli_connect_errno()){

printf("接続失敗: %sn",mysqli_connect_error());

if (!$this->mysqlmaster->set_charset("latin1") && !$this->mysqlslave->set_charset("latin1")){
exit("set charset error")

}
}
プライベート関数 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]);
}

public function mquery($sql){ //更新を挿入

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),
'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、起動コマンドからパラメーターを読み取って設定値を設定します

3、 LIMIT パラメータ

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 で、渡されるパラメーターは現在の接続を指す構造体ポインターであり、アクションは状態メンバーの状態に基づいて決定されます。

Memcached は一連のカスタム プロトコルを使用してデータ交換を完了します。そのプロトコルのドキュメントは、http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt で参照できます

, 改行記号はrn

に統一されています

http://www.bkjia.com/PHPjc/444946.html
www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/444946.html技術記事 PHP チュートリアル memcached mysql チュートリアル開発 Memcached の動作方法の詳細な例 以下のセクションでは、読者が memcached のソース コードのコピーを用意することをお勧めします。 Memcached は従来のネットワーク サービス プログラムです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。