ホームページ  >  記事  >  バックエンド開発  >  PHP は memcache のシングルトン モードを動作させ、そのメカニズムをテストします

PHP は memcache のシングルトン モードを動作させ、そのメカニズムをテストします

WBOY
WBOYオリジナル
2016-07-29 09:08:511620ブラウズ

& lt;? PHPtclass Memcacheopr は Memcached を拡張します
{



PRIVATE Static $ host = '127.0.0.1';
Public static Function Getinstance () {
if (!(self::$instance) Memcached のインスタンス)) {

self::$in を返すstatus; ('max_execution_time',60); //php ページの最大実行時間は 30 秒です。それを超える場合はリセットする必要があります。
$mcache = MemcacheOpr::getInstance(); // シングルトン モード呼び出し
$mcache-& gt; // 最初にすべてクリアされます
$ mcache-& gt; - & gt; 削除 ('string2m');
$mcache->delete('string4m');
for($i=0;$ i $mcache-> ;delete('string'.$i);
}
/*$mcache->set('somewords','何か学びましたか?' );
$output = $mcache->get('somewords ');
echo "output=[$output]
";*/
$begintime = microtime(TRUE);
$input = str_repeat('what',1024*1024*16*2*1.5 ); //192M
$input = substr($input,0,-512);
$mcache->set('string1m',$input) ;//192M 192M に保存されている 5 つのコンテンツがすべて成功するのはなぜですか?これは、memcached がメモリに保存されているものの圧縮を有効にしているためです
$mcache->set('string2m',$input.'areyou2');
$mcache->set('string3m',$input.'areyou3' ) ;
$mcache->set('string4m',$input.'areyou4');
$mcache->set('string5m',$input.'areyou5');
/*for($i= 0 ;$i $mcache->set('string'.$i, $input);
}*/
$input = str_repeat('what',1048576); memcached では圧縮が有効になっているため、実際には 4M のコンテンツが保存されます。実際に保存されるコンテンツが少量であっても問題はありません。
for($i=0;$i $mcache->set('string'.$i,$input);
}
$mcache->delete('somewords ');
$during = microtime(TRUE) - $begintime;
echo '合計時間:'.$during.'s
';
file_put_contents('/tmp/string5m.log',$mcache- >get('string1m'));
//echo '$output の長さは:'.strlen($output).",output=[$output]
";
/*$allKeys = $mcache->getAllKeys();
var_dump($allKeys);

print_r($mcache->getStats());*/




実際、phpinfo() から、次のことがわかります。保存 2000 バイトを超えるコンテンツの場合、memcached は圧縮を有効にします

PHP 配列の場合、memcache はシリアル化するため、保存されたコンテンツの長さは実際のコンテンツの長さと異なる場合があります。

サーバー上の memcache の使用状況を確認したい場合は、telnet 127.0.0.1 11211 コマンドを使用して確認できます

実際に保存されている値を取得します: get string1m

stats コマンドを使用してステータスの一部を表示します。メモリヒットなどPHP は memcache のシングルトン モードを動作させ、そのメカニズムをテストします

統計スラブを使用して、さまざまなスラブブロックの実際の状況を表示します

実際、各ページにはデフォルトで1mのコンテンツが保存され、その後、1mのコンテンツは、そのサイズに応じて多くのブロックに分割できます。これらのブロックはスラブ ブロックです

保存されたコンテンツの長さが同じ場合、通常は同じサイズのブロックが使用され、長さが 1.25 倍 (デフォルトの増分倍数) を超えると、新しいスラブ ブロックが有効になります。 。

増分倍数が大きいほど、メモリの無駄が大きくなります。8k スラブ ブロックが使い果たされ、8k データを保存し続けたい場合は、(デフォルトでは) 10k データが使用され、実際には 2k が使用されます。メモリデータが無駄になります。

増分倍数が 2 の場合、8k のメモリが無駄になります。

上記では、PHP のシングルトン モードでの memcache の動作とそのメカニズムのテストについて、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人にとって役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。