ホームページ >バックエンド開発 >PHPチュートリアル >Memcache を使用した PHP でのデバッグ方法の紹介と応用
Memcache
web
1.
バージョンをダウンロードします。memcached
Memcache
Windows
安定版をダウンロードし、解凍して特定のディスクに置きます。
などc:emcached
2(すなわち
cmd
コマンドインターフェイス)。 「
c:memcachedmemcached.exe -d start
」 開始します。
windowsを起動するたびにサービスとして自動的に開始されます。これでサーバー側のインストールが完了しました。
で見つけてください
6.再起動
-p
、
-d restart
service
-d uninstall Uninstall
rootとしてのみ実行
-m 最大メモリ使用量、単位
-M
1024
最小割り当てスペース、
-hです 高性能分散メモリオブジェクトキャッシュシステムで、統合された巨大な エラーが発生したときに他のサーバーに透過的にフェイルオーバーするかどうか。 memcache.allow_failover = On データの送受信時に試行するサーバーの最大数。これは、 この値で設定されたブロックサイズに従ってデータが転送されます。値が小さいほど、より多くの追加ネットワーク トラフィックが必要になります。原因不明の速度低下に気付いた場合は、この値を memcache.chunk_size = 8192 memcache.default_port = 11211 を memcache.hash_strategy = "standard"; memcache.hash_function = "crc32" memcacheは、 1 . $memcache = 新しい Memcache; 2. $memcache->connect('localhost', 11211) または die ("接続できませんでした"); = $memcache-> getVersion(); 5. echo "サーバーのバージョン: ".$version." 7. $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; 9. $tmp_object->int_attr = 123; 10. 11. $memcache->set('key', $tmp_object, false, 10) or die ("サーバーにデータを保存できませんでした"); 12. echo "データをキャッシュに保存します (データは 10 秒で期限切れになります)" 13. 14. $get_result = $memcache- > get('key'); 15. echo "キャッシュからのデータ: 17. var_dump($get_result); をデバッグする方法を説明します。 最初にテーブルを作成します: create table t(id char(36) not null Primary key, username varchar(20) not null); データを挿入します: $host = '192.168.1.21:3306'; $user = 'ウェブユーザー'; $passwd = '123456'; $db = 'テスト'; $conn = mysql_connect($host,$user,$passwd); mysql_select_db($db,$conn); $sql = 'select * from t order by id desc'; $result = mysql_query($sql,$conn); while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){ $test_key[] = $row; } $sql = md5($sql); $mem = 新しい Memcache; $mem->connect("192.168.1.21", 11211); $mem->set($sql,$test_key, MEMCACHE_COMPRESSED, 600); print_r($mem->get($sql)); ?> 看看結果完了。 Memcache のインストール、これ以上は説明しません。 ::add // Memcache::addServer // Memcache::close // の接続 key Memcache Memcache::flush // Memcache::get // key Memcache::getStats // Memcache::getVersion // key Memcache::pconnect // Memcache Memcache Memcache::set // Memcache::setCompressThreshold // 以下は一部です簡単な使用法例、補足: //Memcache::set メソッドには 4 つのパラメータがあります。最初のパラメータは $mem->set('test','123',0,60); //Memcache::add メソッドは $mem->add('test','123',0,60); //getメソッドの機能は、 $mem->get('test');//出力は //Memcache::replace このメソッドの機能は、既存の $mem->replace('test','456',0,60); //Memcache::deleteメソッドは、 $mem->delete('test',60); ?> Xiao Chenghu PHP キャッシュ アプリケーション: P HP MEMCACHE の詳しい説明 2010-01-28 09:38:44 出典:中国駅長サイト総合 [大中小] コメント数: 0 寄稿したい、この記事を集めたい、Weibo にシェアしたい ウェブマスター取引 (http://jy.chinaz.com) はウェブマスターがお金を稼ぐのに役立ちます、仮想ホストの評価+ IDC ナビゲーション = IDC123. COM Memcache 関数ライブラリは PECL (PHP Extension Community Library) にあり、その主な機能は、大容量のメモリ データの一時保存領域を構築することです。使用することはお勧めしません。 ubuntu にインストールして実行すると、エラーが発生します: 「libeven、memcached、libmemcache のインストール」の方法に従い、次を使用します: sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2 このバグは修正可能です Xindeli を通じて php の memcached モジュールをインストールし、/etc/php5/conf.d/memcached の「」の登録を解除します。 ini" ;"、Apache を再起動し、phpinfo() を呼び出して memcached 情報を表示します。 $memcache = new Memcache; 1. 2. $memcache = 新しい Memcache; 3. $memcache->connect('localhost', 11211) or die (「接続できませんでした」); 4. print_r($memcache->getStats()); 5. /** 6. * 配列 7. * ( 8. * [pid] => 8052 9. * [稼働時間] => 9205 10. * [時間] => 1205898428 11. * [バージョン] => 1.2 .5 12. * [ポインターサイズ] => 32 13. * [rusage_user] => 0.008000 14. * [rusage_system] 0.000000 15. * [curr_items] => 1 16. * [合計アイテム数] => 17 17. * [curr_connections] => 01.02.$memcache = 新しい Memcache; 11.$memcache->delete( 'name', 5); 11.?> PHPキャッシュアプリケーション:PHP MEMCACHE 詳細解説(2) 2010-01-28 09:38:44 ソース: 中国ウェブマスター総合 [大中小] コメント: 0 この記事を集めて共有したいです。 Weibo Webmaster Trading (http://jy.chinaz.com) は、ウェブマスターの収益を支援します 仮想ホストの評価 + IDC ナビゲーション = IDC123.COM memcached サービスが正式に開始されました オブジェクト指向のアプローチを使用することをお勧めしますこのライブラリをテストするには: Memcache::getVersion メソッドの機能は、実行中の Memcache のバージョン情報を返すことです。 Memcache::getStats メソッドの機能は、サーバーの実行統計を返すことです。 Memcache::getStats メソッドには 3 つのパラメータがあります。最初のパラメータは、reset、malloc、maps、cachedump、slabs、items、size を示します。2 番目のパラメータと 3 番目のパラメータは、最初のパラメータに設定されます。 Memcache::getExtendedStats メソッドは、プロセス プール内のすべてのプロセスの実行中のシステム統計を取得するために使用されます。 memcache_debug() 関数は、デバッグ関数を制御するために使用されます。前提条件として、php のコンパイル時に –enable-debug オプションが使用されます。それ以外の場合、この関数は何の効果もありません。 Memcache::addServer メソッドは、使用できるサーバー アドレスを追加するために使用されます。 Memcache::addServer メソッドには、最初のパラメーターを除く 8 つのパラメーターがあり、サーバーのアドレスを示します。 、2 番目のパラメータはポートを示し、3 番目のパラメータは永続的な接続かどうかを示し、4 番目のパラメータはすべてのサーバの中のこのサーバの重みを示し、5 番目のパラメータは接続の継続時間を示し、6 番目のパラメータは最初のパラメータを示します。デフォルトは 15 です。これを -1 に設定すると、サーバーのオンライン ステータスを制御するために使用され、エラー メッセージを処理するためのフォールバック関数を設定できます。 Memcache::setServerParams メソッドは、実行時にサーバーのパラメーターを変更するために使用されます。 Memcache::setServerParams メソッドには 6 つのパラメーターがありますが、Memcache::addServer メソッドには 3 番目と 4 番目のパラメーターがありません。 Memcache::getServerStatus メソッドは、実行中のサーバーのパラメーターを取得するために使用されます。2 つのパラメーターはそれぞれアドレスとポートを表します。 Memcache::flush メソッドは、キャッシュされたデータをすべてクリアするために使用されますが、使用されるメモリ領域は減りません。 Memcache::increment メソッドは保存されたキーの値を加算するために使用され、Memcache::decremen メソッドは保存されたキーの値を減算するために使用されます。 PHP MEMCACHE 高度なキャッシュアプリケーションの詳細説明 記事エントリ: 7747.Net 責任編集者: 7747.Net 269 [Font: Small Large] Memcache 関数ライブラリは PECL (PHP Extension Community Library) にあり、その主な機能は大容量メモリ データ用の 一時ストレージ領域を構築することです。それ以外の場合は使用をお勧めしません。それ。 Ubuntu に をインストールしたときに、次のエラーが報告されました: 共有オブジェクト ファイルを開けません: No such fileまたはディレクトリ 「libeven、memcached、libmemcache のインストール」の方法に従い、 sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so を使用します。 2 Xindeliを通じてphpのmemcachedモジュールをインストールし、/etc/php5/conf.d/memcached.iniの「;」の登録を解除し、Apacheを再起動 して、phpinfo()を呼び出してmemcachedを表示します情報 実行: $memcache = new Memcache; /usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P Memcache::add —値を追加します (既に存在する場合は false を返します) このライブラリをテストするには、指向性オブジェクト メソッドを使用することをお勧めします: Memcache::getVersion メソッドは、次の目的で使用されます。実行中の Memcache のバージョン情報を返します。 Memcache::getStats このメソッドの機能は、サーバーの実行統計を返すことです。 Memcache::getStats メソッドには 3 つのパラメーターがあります。最初のパラメーターは、reset、malloc、maps、cachedump、slabs、items、size の 3 つのパラメーターを示します。2 番目のパラメーターと 3 番目のパラメーターは、3 番目のパラメーターで使用されます。パラメータは「cachedump」に設定されます。 Memcache::getExtendedStats メソッドの機能は、プロセス プール内のすべてのプロセスの実行中のシステム統計を取得することです。 Memcache::connect メソッドは、Memcache オブジェクトの作成に使用されます。 Memcache::pconnect メソッドは、 Memcache 永続接続オブジェクトを作成するために使用されます。 Memcache::close メソッドは、Memcache オブジェクトを閉じるために使用されます。 Memcache::set メソッドの機能は、値を追加することです。Memcache::set メソッドには 4 つのパラメーターがあります。最初のパラメーターはキー、2 番目のパラメーターは値、3 番目のパラメーターは圧縮保存するかどうかを示します。 、4 番目のパラメーターはオプションで、期限切れ後の自動破棄の時間を設定するために使用されます 。 Memcache::add メソッドは Memcache::set メソッドに似ていますが、Memcache::add メソッドの戻り値が false の場合はキーがすでに存在することを意味するのに対し、Memcache::set メソッドは同じであるという点が異なります。メソッドはそれを直接上書きします。 Memcache::get メソッドの機能は、キー値を取得することです。Memcache::get メソッドには、キーを表すパラメーターがあります。 Memcache::replace メソッドは、既存の キーを上書きするために使用されます。 Memcache::replace メソッドには 4 つのパラメーターがあり、Memcache::set メソッドと同じ機能があります。 Memcache::delete メソッドの機能は、キー値を削除することです。Memcache::delete メソッドには 2 つのパラメーターがあり、最初のパラメーターはキー を表し、2 番目のパラメーターはオプションで、削除遅延時間を表します。 Memcache::setServerParams メソッドは、実行時にサーバーのパラメーターを変更するために使用されます。 Memcache::setServerParams メソッド には 6 つのパラメーターがありますが、Memcache::addServer メソッドには 3 番目と 4 番目のパラメーターがありません。 Memcache::getServerStatus メソッドは、実行中のサーバーのパラメーターを取得するために使用されます。2 つのパラメーターはそれぞれアドレスとポートを表します。 Memcache::increment メソッドは保存されたキーの値を加算するために使用され、Memcache::decremen メソッドは保存されたキーの値を減算するために使用されます。 Discuz! の Memcache キャッシュの実装について 前書き:
n"; 6.
n"; 16.
/usr/local/memcached/bin/memcached: 共有ライブラリのロード中にエラーが発生しました: libevent-1.4.so.2:
共有オブジェクト ファイルを開けません:そのようなファイルまたはディレクトリはありません
$memcache->connect('localhost', 11211) or die ("接続できませんでした"); > ;getVersion();
echo "サーバーのバージョン: ".$version."n";>
06.{ 04.$memcache->set( 'name', 'leo', 0, 30); 05.if(!$memcache->add( 'name', 'susan', 0, 30))
03.$memcache->connect('localhost', 11211) or die (「接続できませんでした」);
07. エコー「スーザンは存在します」; 08.};
06.$memcache->addServer('192.168.1.116', 11211); 09.$memcache->replace( 'name', 'lion', 0, 300); 04.} 05.$memcache = 新しい Memcache; 10.echo $memcache->get( 'name'); 03. print 「memcache '$host:$port' が失敗しました」;
12.?>
01.02.function _callback_memcache_failure($host, $port) { 07.$memcache->setServerParams('192.168.1.116', 11211, 1, 15, true,
08.
09.'_callback_memcache_failure');
10.echo $memcache->getServerStatus('192.168.1.116', 11211);
01.02.$memcache = newメムキャッシュ ;
03.$memcache->connect('localhost', 11211);
04.$memcache->set('test_item', 8); 4 );
06.echo $memcache->decrement('test_item', 7);
07.// 5 を表示します
/usr/local/memcached/bin/memcached: 共有ライブラリの読み込み中にエラーが発生しました: libevent-1.4.so.2:
このバグは修正可能です
$memcache->connect('localhost', 11211) or die ("接続できませんでした"); ;getVersion();
echo "サーバーのバージョン: ".$version."
?>
$memcache = new Memcache; 11211 ) または die ("接続できませんでした");
/**
* 配列
* (
* [pid] => 8052
* [稼働時間] => 9205
* [時間] => 1205898428
* [バージョン] => 1.2.5
* [pointer_size] = > 32
* [rusage_user] => 0.008000
* [rusage_system] => 0.000000
* [total_items] => 17
* [バイト] => 57
* [curr_connections] => 2
* [total_connections] => 15
* [接続構造] => 9
* [cmd_set] 23
* [get_hits] => ; 5
* [get_misses] => 4
* [エビクション] => 0
* [bytes_read] => 850 [limit_maxbytes] => 10485760
* [スレッド] => 1
* )
*/
$memcache = 新しい Memcache; $memcache->connect('localhost', 11211) or die ("接続できませんでした")
$memcache->set('name', 'leo', 0, 30); ->add( '名前', 'スーザン', 0, 30))
{
エコー 'スーザンは存在します'
$memcache->replace( '名前', 'ライオン', 0, 300 );
echo $memcache->get( 'name');
$memcache->delete( 'name', 5);
$ Memcache = 新しい Memcache; $ Memcache-& GT; setServerParams (' 192.168) .1.116', 11211, 1, 15, true,
'_callback_memcache_failure');
ech o $memcache->getServerStatus('192.168.1.116', 11211);
$meマックキャッシュ =新しい Memcache;
$memcache->connect('localhost', 11211);
$memcache->increment('test_item', 4); $memcache->decrement('test_item', 7)
// 5 を表示します
?>
/tmp/memcached.pid
memcached のサービスが正式に開始されました
Memcache::addServer — 使用するサーバー アドレスを追加します
Memcache::close — Memcache オブジェクトを閉じる
Memcache::connect — Memcache オブジェクトを作成します
memcache_debug — 制御デバッグ関数
Memcache::decrement — 保存されたキーの値を減算します
Memcache::delete — キー値を削除します
Memcache::flush — キャッシュされたデータをすべてクリアします
Memcache::get — キー値を取得します
Memcache::getExtendedStats — を取得しますプロセスプール内のすべてのプロセスの実行中のシステム統計
Memcache::getServerStatus — 実行中のサーバーのパラメーターを取得します
Memcache::getStats — サーバーの実行中の統計を返します
Memcache::getVersion — 実行中の Memcache のバージョン情報を返します
Memcache ::increment — 保存されたキーに値を追加します
Memcache::pconnect — Memcache 永続接続オブジェクトを作成します
Memcache::replace — R が既存のキーを上書きします 操作
Memcache::set — 値がすでに存在する場合は追加します上書きします
Memcache::setCompressThreshold — 特定のサイズより大きいデータを圧縮します Memcache::setServerParams — 実行時にサーバー パラメーターを変更します
この記事は、PHP+MySQL アーキテクチャ サイトにおいて、MySQL の観点から Discuz! Forum (または同様の PHP+MySQL アーキテクチャ プログラム) が大量のアクセスに対処する方法を分析することに焦点を当てています。同時に、Memcache を使用して MySQL への負荷を軽減するためのいくつかの提案が提供されます。データの多くは個人的なテストの結果です。異なる意見がある場合は、メッセージを残してください。なお、個人的な思考の問題により、少々飛躍した文章になっておりますが、ここに宣言させていただきます!
システム分析:
純粋に MySQL の観点から見ると、1 つの MySQL データベースに 1 日に数億のオペレーション (1 秒あたり約 1,100 の MySQL オペレーションを 86,400 倍) でロードすることは、それほど難しいことではありません。このデータによると、MySQL サーバーが 1 台あるフォーラムでは 2,000 万 PV を達成するのは問題ではないということですが、国内のフォーラムのほとんどは 1 日あたり 2,000 万 PV を達成することはできないと思いますが、実際はそうではありません。フォーラムのPVが100万を超えると、WEBはもう圧倒されてしまいます。
私が手元にあるデータによると、Discuz! Forum の現在の基本サーバー アーキテクチャは、前部の Squid と後部の DB によってサポートされています。このアーキテクチャでは、Web サーバーへの負荷の増加はサーバーを並列に追加することで解決できますが、MySQL への負荷は解放される場所がありません。公式の MySQL サービスを考慮せずに、適切に使用することで MySQL サーバーへの負荷を軽減できます。メムキャッシュの。
一部の友人は、データテーブルをサブテーブルにできると言うかもしれません (注: ここでのサブテーブルとは、pw、dv サブテーブルなど、PHP プログラムを介したサブテーブルを指します) が、現在の状況では、DB サーバーは、現在のデータ処理はサポートされていますが、PHP を介してテーブルを MySQL に分割しても、MySQL の負荷を軽減することはできません。 (注: この段落は、すでに形成されているシステムに関するものです。独自に開発したシステムの場合は、アーキテクチャの初期段階でデータ パーティションを同期することをお勧めします。)
友人の中には、次のマスター/スレーブ アーキテクチャを使用するという人もいるかもしれません。 MySQL です。これを提案する場合は、マニュアルをもう一度読んで問題を明確に説明します。 Mysql マスター/スレーブ モードでは、スレーブは主にデータのバックアップに使用され、マスターに障害が発生した場合にのみ、スレーブはマスターのサービスを引き継ぎ、マスターが正常に戻るまで外部リクエストを処理します。つまり、マスター/スレーブでは、マスターまたはスレーブのどちらかがサービスを提供し、マスター/スレーブが同時にサービスを提供することはありません。 MySQL マスター/スレーブを使用しても、MySQL の負荷を効果的に軽減することはできません。
なぜ MySQL Cluster を使用しないのかと尋ねられるかもしれませんが、同じ金額を費やすのであれば、最大のメリットを得るのが最善の方法です。 PS: 余談になりますが、MySQL のマニュアルでは MySQL クラスターを MySQL クラスターと説明していますが、これには慣れていません。実際、MySQL 5.1 の MySQL パーティションは非常に優れたもので、任意のサイズに設定できるルールに従って、単一テーブルの複数の部分をファイル システム全体に割り当てることができます。実際には、テーブルの異なる部分が別のテーブルとして異なる場所に保存されます。これは、現在の状況下で MySQL の負荷を軽減するための最も積極的かつ効果的なソリューションの 1 つであると思います。しかし、残念ながら、私にはこの MySQL パーティショニング方法を個人的に使用した経験がなく、それが安定しているか不安定であるかを示す十分な事例もありません。それで今も放浪中です。知っていたら教えてください! Tencent は MySQL パーティショニングを使用していると言う友人もいましたが、残念ながら正確なデータは入手できませんでした。
ユーザー環境要件などの特定の条件下で、MySQL の負荷を軽減するための多くの方法を分析してまとめた結果、現在の状況では、Discuz! の MySQL 負荷を軽減するのがより効果的な方法であるという結論に達しました。 Memcacheを使うには!
Memcache を使用する理由: 1. Web サーバー (Lighttpd と Nginx は Apache よりもはるかに効率的と言われています。試してみてください) は高い CPU 要件と低いメモリ要件を備えています。Memcached サーバーの CPU 要件とメモリ要件は低いです。高さがあるので併用可能です。フロントエンド Web サーバーに Memcached サーバーをインストールすることは可能です。
2. お金、お金、お金、最小の努力で最大の利益。
3. 合理的なアーキテクチャを備えたシステムの場合、Memcache サポートの追加は単なるバッチ処理です。Memcache を使用してください
1。config.inc.php .0.1 に
$memcachehost = '127.0 を追加します。 ';
$memcacheport = 11211;
$memcachelife = 60; include/common.inc.php 内
$mem->connect($memcachehost, $memcacheport); include/db_mysql.class.php の fetch_array メソッドと query メソッドを変更し、query_mysql メソッドを追加します。コードは次のとおりです。
function fetch_array($query, $result_type = MYSQL_ASSOC) {
return is_resource($query) ? $query, $result_type) : $query[0];
}
function query_memcache($sql, $type = '') {
global $mem,$memcachelife = md5($sql); !($query = $mem->get($key))) {
$query = $this->query($sql, $type);
while($item = $this->fetch_array ($)クエリ)) {
$res[] = $item;
$query = $res;
$key, $query, 0, $memcachelife); }
function query($sql, $type = '') {
global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes;
$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query')
'mysql_unbuffered_query' : 'mysql_query';
if(!($query = $func($sql, $this->link)) && $type != 'SILENT') {
$this->halt( 'MySQLクエリエラー', $sql);
}
if(substr($sql, 0, 6) == 'SELECT') {
echo 'キャッシュ SQL:'.$sql.'
' } else {
echo 'Flash SQL:'.$sql.'
';
$this->querynum++;
}
4. Memcache によってキャッシュされる必要がある SQL クエリのコードは、
によって記述されます。 $db- >query(
$db->query_memcache(
Note および
while($post = $db->fetch_array($query))) {
foreach($query as $post に変更) ) {
$db->fetch_array without while は変更する必要はありません。
役立つ場合は、次のコードを使用してください:
preg_replace("/while
[数学処理エラー]
)/is", "foreach($query as $\1)", $file);
後でリリースします。ガジェットをバッチで交換します。
EditPlus で次のように置き換えることができます: while
[数学処理エラー]
) は foreach($query as $1) に置き換えられます
5. 完了しました。テストしてください。 ~
参考資料:
Memcached について質問がある場合は、次の記事を参照してください:
Linux での Memcache のインストール: http://www.ccvita.com/index.php/257.html
Windows での Memcache のインストール: http: //www.ccvita.com/index.php/258.html
Memcache の基本チュートリアル: http://www.ccvita.com/index.php/259.html Discuz! の Memcache キャッシュ実装: http:// www .ccvita.com/index.php/261.html
上記では、関連する側面も含めて、Memcache を使用した PHP のデバッグ方法の紹介と応用を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。