1. APC キャッシュの概要
APC、正式名称はAlternative PHP Cache、正式訳は「Optional PHP Cache」と呼ばれます。これは、PHP の中間コードをキャッシュして最適化するためのフレームワークを提供します。 APC のキャッシュは、システム キャッシュとユーザー データ キャッシュの 2 つの部分に分かれています。
システムキャッシュ
これは、APC が PHP ファイルのソース コードのコンパイル結果をキャッシュし、呼び出されるたびにタイムスタンプを比較することを意味します。有効期限が切れていない場合は、キャッシュされた中間コードが実行に使用されます。デフォルトのキャッシュ
3600 秒 (1 時間)。しかし、それでもかなりの CPU 時間を浪費します。したがって、php.ini でシステム キャッシュを期限切れにしないように設定できます (apc.ttl=0)。ただし、このように設定した場合、PHP コードを変更した後に WEB サーバーを再起動する必要があります。現在、このタイプのキャッシュが一般的に使用されています。
ユーザーデータキャッシュ
キャッシュは、ユーザーが PHP コードを記述するときに apc_store 関数と apc_fetch 関数を使用して読み書きします。データ量がそれほど多くない場合は、試してみてください。データ量が大きい場合は、memcache のような、より特化したメモリ キャッシュ ソリューションを使用することをお勧めします
キャッシュキー生成ルール
APC キャッシュの各スロットにはキーがあり、そのキーは
apc_cache_key_t 構造体タイプは、キー関連の属性に加えて、h フィールドの生成もキーとなります。 h フィールドは、この要素がスロット配列内のどこに位置するかを決定します。ユーザーキャッシュとシステムキャッシュでは生成ルールが異なります。 ユーザー キャッシュは、apc_cache_make_user_key 関数を通じてキーを生成します。ユーザーによって渡されたキー文字列は、PHP カーネルのハッシュ関数 (PHP のハッシュテーブルで使用されるハッシュ関数: zend_inline_hash_func) に基づいて h 値を生成します。
システム キャッシュは、apc_cache_make_file_key 関数を通じてキーを生成します。 APC 設定項目 apc.stat のスイッチを介して、異なるソリューションを異なる方法で処理できます。オープンの場合、それは
apc.stat= On の場合、コンパイルされたコンテンツは更新されると自動的に再コンパイルされ、キャッシュされます。このときのhの値は、ファイルのdeviceとinodeを足した値になります。シャットダウンの場合、つまり apc.stat=off の場合、ファイルが変更されたときに、更新された内容を有効にするには、Web サーバーを再起動する必要があります。このとき、h値はファイルのパスアドレスに基づいて生成され、ここでのパスは絶対パスとなる。相対パスを使用する場合でも、PG (include_path) ロケーション ファイルを検索して絶対パスを取得するため、絶対パスを使用するとチェックが省略され、コードの効率が向上します。
キャッシュプロセスを追加
ユーザー キャッシュを例に挙げると、apc_add 関数を使用してコンテンツを APC キャッシュに追加します。キー パラメーターが文字列の場合、APC はその文字列に基づいてキーを生成します。キー パラメーターが配列の場合、APC は配列全体を走査してキーを生成します。これらのキーに基づいて、APC は _apc_store を呼び出して値をキャッシュに保存します。これはユーザー キャッシュであるため、現在使用されているキャッシュは apc_user_cache です。書き込み操作を実行するのは apc_cache_make_user_entry 関数であり、最終的に apc_cache_user_insert を呼び出してトラバーサル クエリと書き込み操作を実行します。同様に、システム キャッシュは apc_cache_insert を使用して書き込み操作を実行し、最終的に _apc_cache_insert を呼び出します。
ユーザー キャッシュでもシステム キャッシュでも、一般的な実行プロセスは次のとおりです。
スロット配列内の位置を見つけた後、現在のキーに対応するスロットのリンクされたリストを調べます。書き込まれるキーと一致するスロット キーがある場合、またはスロットの有効期限が切れた場合は、現在のスロットをクリアします。
最後のスロットの後に新しいスロットを挿入します。
2.APCモジュールのインストール
ウィンドウズ
ステップ 1: http://pecl.php.net/package/apc で php_apc.dll をダウンロードし、PHP のバージョンと一致させるために、php_apc.dll を ext ディレクトリに置きます
拡張子=php_apc.dll
apc.rfc1867 = オン
apc.max_file_size = 100M
upload_max_filesize = 100M
post_max_size = 100M
//上記のパラメータは自分で定義できます
ステップ 3: PHP APC がサポートされているかどうかを確認する apc_store apc_fetch PHP APC 設定パラメーター 関連する設定をまとめて説明します。
apc.enabled=1 apc.enabled のデフォルト値は 1 ですが、0 に設定すると APC を無効にできます。 0 に設定する場合は、extension=apc.so もコメントアウトします (これによりメモリ リソースを節約できます)。 APC 機能が有効になると、オペコードは共有メモリにキャッシュされます。
apc.shm_segments = 1
概要 1. 最高のパフォーマンスを達成するには、Spinlocks ロック メカニズムを使用します。
2. APC は、APC キャッシュを監視および管理するための apc.php を提供します。管理者名とパスワードを忘れずに変更してください
3. APC はデフォルトで mmap 匿名マッピングを通じて共有メモリを作成し、キャッシュ オブジェクトはこの「大きな」メモリ空間に保存されます。共有メモリはAPC自体によって管理されます
4. 統計を通じて、apc.shm_size、apc.num_files_hints、および apc.user_entries_hint の値を調整する必要があります。最高になるまで
5、わかりました、apc.stat = 0 の方がパフォーマンスが向上することは認めます。あなたの望むものなら何でも受け入れます
6、PHP の事前定義定数、apc_define_constants() 関数を使用できます。ただし、APC 開発者によると、pecl Hidef の方がパフォーマンスが優れており、例外定義をスローするだけなので非効率的です。
7、関数 apc_store()、システム設定などの PHP 変数の場合、ライフサイクルはアプリケーション全体 (httpd デーモンから httpd デーモンが終了するまで) であるため、Memcached よりも APC を使用する方が適切です。結局のところ、ネットワーク伝送プロトコル tcp は使用しないでください。
8. APC は、関数 apc_store() を使用して頻繁に変更されるユーザー データをキャッシュするのには適しておらず、いくつかの奇妙な現象が発生します。
リューン
wget http://pecl.php.net/get/APC-3.1.8.tgz
tar -zxvf APC-3.1.8.tgz cd APC-3.1.8
/usr/local/php/bin/phpize
./configure --enable-apc --enable-mmap --enable-apc-spinlocks --disable-apc-pthreadmutex --with-php-config=/usr/local/php/bin/php-config
作る
sudo make install
/usr/local/php/etc/php.ini を追加します
拡張子 = "apc.so" ;
;APC設定
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64M
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = オン
Apache または /usr/local/php/sbin/php-fpm を再起動します
phpinfo apcを表示
以下は、www.initphp.com フレームワークの APC キャッシュ クラスを指します
initphpフレームワークのAPCキャッシュクラス
[php]
if (!define('IS_INITPHP')) exit('アクセスが拒否されました!');
/*************************************************** * *********************************
※InitPHP 2.0の国産PHP開発フレームワークDao-APCキャッシュは、頻繁に書き込まれるキャッシュデータには適していません
*------------------------------------------------ - ---------------------------------
* 著作権: CopyRight By initphp.com
※このソースコードはご自由にお使いいただけますが、ご使用の際は作者情報を保管しておいてください。他人の労働の成果を尊重することは、自分自身を尊重することになります
*------------------------------------------------ - ---------------------------------
* $作者:zhuli
* $Dtime:2011-10-09
************************************************* * *********************************/
クラス apcInit {
/**
* APC キャッシュセットキャッシュ
*キャッシュキー、値、キャッシュ時間を設定します
* @param 文字列 $key KEY 値
* @param string $value value
* @param string $time キャッシュ時間
*/
パブリック関数 set_cache($key, $value, $time = 0) {
If ($time == 0) $time = null // null の場合は永続的にキャッシュします
return apc_store($key, $value, $time);;
}
/**
* Apc キャッシュ - キャッシュを取得します
* KEYを通じてキャッシュデータを取得します
* @param 文字列 $key KEY 値
*/
パブリック関数 get_cache($key) {
戻り apc_fetch($key);
}
/**
* APC キャッシュ - キャッシュをクリアします
* memcache からキャッシュを削除します
* @param 文字列 $key KEY 値
*/
パブリック関数 Clear($key) {
戻り apc_delete($key);
}
/**
* APC キャッシュ - すべてのキャッシュをクリア
※この機能の使用は非推奨です
* @return
*/
パブリック関数 clear_all() {
apc_clear_cache('user') // ユーザーのキャッシュをクリアします
;
return apc_clear_cache() // キャッシュをクリアします
;
}
/**
* APCキャッシュが存在するか確認してください
* @param 文字列 $key KEY 値
*/
パブリック関数が存在します($key) {
戻り apc_exists($key);
}
/**
* フィールドの自動インクリメント - カウントに使用されます
* @param 文字列 $key KEY 値
* @param int $step 新しいステップ値
*/
パブリック関数 inc($key, $step) {
return apc_inc($key, (int) $step);
}
/**
* フィールドのデクリメント - カウントに使用されます
* @param 文字列 $key KEY 値
* @param int $step 新しいステップ値
*/
パブリック関数 dec($key, $step) {
return apc_dec($key, (int) $step);
}
/**
* APC キャッシュ情報を返します
*/
パブリック関数 info() {
戻り apc_cache_info();
}
}