ホームページ >バックエンド開発 >PHPチュートリアル >Symfony と APC (代替 PHP キャッシュ) の出会い
PHP アクセラレータについて言えば、先週まで私はもっぱら XCache ユーザーでした。最近、symfony アプリケーションで APC を使用する必要がありました。 symfony は優れた APC 統合を提供するため、非常にスムーズに進みました。
PHP アクセラレーター (任意) を有効にするだけで、オペコードのキャッシュによりパフォーマンスが向上することに注意してください。そのため、常に運用環境で使用する必要があります。ほとんどのアクセラレータは、あらゆるものをキャッシュできる API も提供しています。
symfony の PHP アクセラレータsymfony では最も人気のあるアクセラレータを活用するのは非常に簡単です。いくつかのファクトリのキャッシュ戦略 (ビュー、国際化、ルーティング) を変更できます。 Doctrine の DQL クエリと結果をキャッシュすることもできます。
Symfony は sfAPCCache クラスで APC サポートを提供するだけでなく、XCache (sfXCacheCache)、EAccelerator (sfEacceleratorCache)、memcache (sfMemcacheCache)、および SQLite (sfSQLiteCache) 用のドライバーも提供します。 sfCache クラスを拡張することで、独自のドライバーを非常に簡単に実装することもできます。
この短いチュートリアルは、他のアクセラレータにも使用できます。 sfAPCCache/Doctrine_Query_Cache を適切なクラスに置き換えるだけです。
ファクトリで APC を有効にするすべてのキャッシュ戦略はデフォルトで sfFileCache に設定されます。ファクトリ ファイル (つまり、apps/frontend/config/factories.yml) でルーティング、ビュー、および i18n の設定を変更できます。
all: routing: class: sfPatternRouting param: generate_shortest_url: true extra_parameters_as_query_string: true cache: class: sfAPCCache param: automatic_cleaning_factor: 0 lifetime: 31556926 view_cache: class: sfAPCCache i18n: param: cache: class: sfAPCCache param: automatic_cleaning_factor: 0 lifetime: 31556926
今後、ルーティング、ビュー キャッシュ、および翻訳は、ハードドライブの代わりにメモリ。このようにして、symfony はディスク操作 (遅い) を大幅に減らします。
Doctrine で DQL と結果キャッシュを有効にするDoctrine でクエリ キャッシュを有効にすることは、非常に安全な操作です。準備されたステートメントを使用し、文字列の連結によってクエリを作成しない限り、心配する必要はありません。クエリキャッシュは、よく書かれたプロジェクトのほとんどで有効にできると思います。
symfony では、Doctrine はプロジェクト設定クラス (config/ProjectConfiguration.class.php) の configureDoctrine() メソッドで設定されます。クエリ キャッシュを有効にするには、ATTR_QUERY_CACHE 属性を設定する必要があります。
/** * @param Doctrine_Manager $manager * @return null */public function configureDoctrine(Doctrine_Manager $manager){ $manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, new Doctrine_Cache_Apc());}
結果キャッシュを有効にするのは難しい場合があります。それは本当にプロジェクトによって異なります。さまざまな結果セットの有効期間が異なる場合があります。また、急速に変化するデータを扱う場合、結果をキャッシュすることはできません (「一度取得すると古くなってしまう」ようなものです)。ほとんどの状況で、すべての結果キャッシュを有効にすることが最善の解決策とはなりません:
$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, new Doctrine_Cache_Apc());
クエリ キャッシュと結果キャッシュの両方は、マネージャー レベルだけでなく、接続レベルとクエリ レベルでも有効にできることは言及する価値があります:
すごいです
Doctrine のドキュメントでは、クエリ キャッシュと結果キャッシュの両方について詳細な説明が提供されています: クエリ キャッシュと結果キャッシュ。
APC の将来昔、私は XCache を選択しました。なぜなら、当時は XCache の方が保守性が高く、パフォーマンスに違いがなかったからです。現在、APC が積極的に開発されており、PHP コアに APC を含める計画があるため、自分の決定を再考する必要があります。
何を使用していますか?なぜ?ベンチマークを実行しましたか?
出典: http://www.zalas.eu/symfony-meets-apc-alternative-php-cache