ホームページ >バックエンド開発 >PHPチュートリアル >PHP APC キャッシュの構成と使用法の詳細_PHP チュートリアル

PHP APC キャッシュの構成と使用法の詳細_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:37:10924ブラウズ

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 構造体タイプです。 key 関連する属性のキーは、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 を呼び出します。
ユーザー キャッシュでもシステム キャッシュでも、一般的な実行プロセスは次のとおりです。

剰余演算を通じて、スロット配列内の現在のキーの位置を特定します:cache->slots[key.h % cache->num_slots];
スロット配列内の位置を特定した後、以下に対応する位置を走査します。現在のキー スロットのリンクされたリストで、スロットのキーが書き込まれるキーと一致するか、スロットの有効期限が切れた場合、現在のスロットはクリアされます。
最後のスロットの後に新しいスロットを挿入します。
2. APC モジュールのインストール

A. WINDOWS に APC をインストールします
ステップ 1: http://pecl.php.net/package/apc で php_apc.dll をダウンロードします。 ext ディレクトリ
ステップ 2: php.ini が apc 拡張モジュールをサポートするようにします。 次に、php.ini を開いて以下を追加します:

コードをコピーします コードは次のとおりです:
extension=php_apc.dll
apc.rfc1867 = on
apc.max_file_size = 100M
upload_max_filesize = 100M
post_max_size = 100M
//上記のパラメータは自分で定義できます

ステップ 3: PHP APC apc_store apc_fetch がサポートされているかどうかを確認します
phpinfo に apc 関連項目があるかどうかを確認します

B.LIUNX に APC をインストールします
ステップ 1: ダウンロードしてインストールします
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
make
sudo make install
ステップ 2: APC を設定する
/usr/local/php/etc/php.ini に次の設定項目を追加します:

コピーコード コードは次のとおりです:

extension = "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 = on

ステップ 3: インストールが成功したかどうかを確認します
apache または /usr/local/php/sbin/php-fpm を再起動します
phpinfo に apc 関連の項目があるかどうかを確認します
設定パラメータの詳細な説明と使用方法の概要 3 つです。
1) .APCモジュールのパラメータ設定の詳細な説明

コードをコピー コードは次のとおりです:

apc.enabled ブール値
apc.enabled を 0 に設定すると、APC を無効にできます。これは主に、APC を静的に PHP にコンパイルする場合に役立ちます。これを無効にする他に方法がないためです (DSO としてコンパイルする場合、php.ini の拡張行をコメント アウトできます)。

apc.shm_segments Integer
コンパイル キャッシュに割り当てられた共有メモリ ブロックの数。 APC が共有メモリを使い果たし、apc.shm_size をシステムで許可される最大値に設定している場合は、このパラメータの値を増やしてみることができます。

apc.shm_size 整数
各共有メモリ ブロックのサイズは MB 単位です。デフォルトでは、一部のシステム (ほとんどの BSD バリアントを含む) では、共有メモリ ブロック サイズの制限が非常に低く設定されています。

apc.optimization Integer
最適化レベル。最適化を無効にするには 0 に設定します。値が大きいほど、より強力な最適化が使用されます。多少の速度向上が期待できます。これはまだ実験的な性質のものです。

apc.num_files_hint 整数
Web サーバーに含まれ、要求されたさまざまなソース ファイルの数のヒント。よくわからない場合は、0 に設定するか省略してください。この設定は、主に何千ものソース ファイルがあるサイトで役立ちます。

apc.ttl Integer
キャッシュ エントリがキャッシュ領域内の別のエントリによって必要とされる場合、考慮する必要があるのは、このキャッシュ エントリがキャッシュ領域内でアイドル状態でいられる秒数です。このパラメータを 0 に設定すると、キャッシュが古いエントリでいっぱいになる可能性があり、新しいエントリはキャッシュされなくなります。

apc.gc_ttl 整数
キャッシュ エントリがガベージ コレクション リスト内で存続する秒数。この値は、キャッシュされたソース ファイルが実行され、同時にサーバー プロセスが停止した場合のエラー保護を提供します。そのソース ファイルが変更された場合、古いバージョンのキャッシュ エントリに割り当てられたメモリは、このパラメータで設定された TTL 値に達するまで再利用されません。 0 に設定すると、この機能が無効になります。

apc.cache_by_default ブール値
デフォルトはオンですが、オフに設定して、プラス記号で始まる apc.filters とともに使用することもできます。ファイルはフィルターに一致する場合にのみキャッシュされます。

apc.filters 文字列
POSIX 拡張正規表現のカンマ区切りのリスト。いずれかのパターンがソース ファイル名と一致する場合、そのファイルはキャッシュされません。一致に使用されるファイル名は、絶対パスではなく、include/require に渡されたファイル名であることに注意してください。正規表現の最初の文字が + の場合、その式は、その式に一致するファイルがキャッシュされることを意味し、最初の文字が - の場合、一致するファイルはキャッシュされません。 - はデフォルト値なので省略できます。

apc.mmap_file_mask 文字列 (この段落は本当に理解していないため、翻訳はありません)
--enable-mmap を使用して MMAP サポートでコンパイルした場合、これは決定のために mmap モジュールに渡す mktemp スタイルの file_mask ですmmap のメモリ領域がファイル バックアップされるか共有メモリ バックアップされるかどうか。ファイル バックアップされた mmap の場合は、/tmp/apc.XXXXXX (正確に 6 つの X) に設定します。POSIX スタイルの shm_open/ を使用します。 mmap はマスクのどこかに .shm を置きます (例: /apc.shm.XXXXXX)。これを /dev/zero に設定して、匿名 mmap メモリにカーネルの /dev/zero インターフェイスを使用することもできます。未定義のままにしておくと、強制的に匿名になります。 mmap.

apc.slam_defense integer
非常に負荷の高いサーバーでは、サービスを開始するかファイルを変更するかにかかわらず、同じファイルを同時にキャッシュしようとする複数のプロセスで競合が発生します。このオプションは、プロセスがキャッシュされていないファイルのキャッシュ試行をスキップする割合を設定します。または、これを単一プロセスがキャッシュをスキップする確率と考えてください。たとえば、apc.slam_defense を 75 に設定すると、プロセスは 75% の確率でキャッシュされていないファイルをキャッシュしないことになります。したがって、設定を高くすると、キャッシュの衝突確率が低下する可能性が高くなります。この機能を無効にするには、0 に設定します。

apc.file_update_protection integer
実行中のサーバー上のファイルを変更するときは、アトミック操作を実行する必要があります。つまり、最初に一時ファイルを書き込み、終了したらファイルの名前を最終的な場所に変更 (mv) します。多くのテキスト エディタ、cp、tar、およびその他の同様のプログラムは、このようには動作しません。これは、ファイルの書き込み中にファイルにアクセスして (キャッシュする) 機会があることを意味します。 apc.file_update_protection の設定により、キャッシュによる新しいファイルのマーク付けが遅延します。デフォルト値は 2 です。これは、ファイルの変更時間がアクセス時間から 2 秒未満であることが判明した場合、ファイルはキャッシュされないことを意味します。不運なユーザーが書きかけのファイルにアクセスすると、奇妙な動作が発生する可能性がありますが、少なくとも永続的なものではありません。ファイルの更新にアトミック操作を頻繁に使用することが確実な場合は、このパラメータを 0 に設定することでこの保護をオフにできます。システムに IO 操作が殺到し、更新プロセスに 2 秒以上かかる場合は、この値を増やす必要がある場合があります。

apc.enable-cli integer
主にテストとデバッグ用。 CLI バージョンの PHP の APC 機能を有効にします。一般に、CLI リクエストごとに APC のキャッシュを作成、移植、破棄することは考えられませんが、さまざまなテスト状況では、CLI バージョンで APC を有効にするのは簡単です。

2). 使用法の概要
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() を使用して頻繁に変更されるユーザー データをキャッシュするのには適しておらず、いくつかの奇妙な現象が発生します。

4. 使用例
以下にinitphpフレームワークのAPCキャッシュクラスを引用します

コードをコピーします コードは以下の通りです:

if
class Apc{

/ **
* Apc キャッシュセットキャッシュ
* キャッシュキー、値、キャッシュ時間を設定
* @param string $key KEY value
* @param string $value value
*/
public function set_cache($key, $value, $time = 0) {
if ($time == 0) $time = null //null の場合は永続的にキャッシュします
return apc_store($ key, $value, $time ; ( $ key) {e Return APC_DELETE ($ key);

/** 存 * APC キャッシュ - キャッシュの取得
* キーを通じてキャッシュ データを取得
* @param String $ key key
* /
APC_CLER_CACHE ('User'); ); // キャッシュをクリアします
}

/**
* Apc キャッシュ - キャッシュをクリアします
* memcache からキャッシュを削除します
* @param 文字列 $key KEY 値
*/
public function contains($key) {
Return apc_exists($key) }

/**
* Apc キャッシュ – すべてのキャッシュをクリアします
* この機能の使用は推奨されません
* @return
*/株式会社パブリックファンクション( { key, (int) $step);

/**
* APC キャッシュが存在するかどうかを確認します
* @param string $key KEY 値
*/
public function info() {
return apc_cache_info(); }
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/736793.html技術記事 1. APCキャッシュの紹介 APC、正式名称はAlternative PHP Cache、正式訳は「Optional PHP Cache」と呼ばれます。これは、PHP の中間コードをキャッシュして最適化するためのフレームワークを提供します。 APC のキャッシュ スコア...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。