Memcached とは何ですか?
Memcached は、danga.com (LiveJournal を運営する技術チーム) によって開発された分散メモリ オブジェクト キャッシュ システムで、データベースの負荷を軽減し、動的システムのパフォーマンスを向上させるために使用されます。多くの人が SharedMemory のようなストレージ キャリアとして使用しています。memcached はデータの整理に同じ「Key=>Value」メソッドを使用しますが、共有メモリや APC などのローカル キャッシュとは大きく異なります。 Memcached は分散型です。つまり、ローカルではありません。ネットワーク接続に基づいてサービスを完了します (もちろん、localhost を使用することもできます)。それ自体はアプリケーションに依存しないプログラムまたはデーモン プロセス (デーモン モード) です。
Memcached は libevent ライブラリを使用してネットワーク接続サービスを実装します。理論的には、無制限の接続を処理できます。ただし、Apache とは異なり、安定した継続的な接続を重視しているため、実際の同時実行機能は制限されています。保守的な環境では、memcached の最大同時接続数は 200 ですが、これは Linux スレッドの機能に関連しており、この値は調整できます。 libevent については、関連ドキュメントを参照してください。
Memcached のメモリ使用量も APC とは異なります。 APC は共有メモリと MMAP に基づいており、Memcachd は独自のメモリ割り当てアルゴリズムと管理方法を備えており、通常、各 memcached プロセスは 2GB のメモリ空間を管理できます。より多くのスペースが必要な場合は、プロセスの数を増やすことができます。
Memcached の使用方法?
多くの場合、memcached は悪用されており、必然的に多くの人がそれについて苦情を言うことになります。よくフォーラムで「効率を上げるにはどうすればいいですか?」というような投稿をしている人を見かけますが、「memcached を使ってください」という返事が返されます。どこで使用しますか?何に使われますか?詳細な回答はありませんでした。著者がここで強調したいのは、memcached は万能薬ではなく、あらゆる状況に適しているわけではないということです。
Memcached は「分散」メモリ オブジェクト キャッシュ システムです。つまり、「分散」する必要がないアプリケーション、共有する必要がないアプリケーション、またはサーバーが 1 つしかないアプリケーションの場合、memcached は使用できません。それどころか、ネットワーク接続には、UNIX ローカル接続であってもリソースが必要になるため、システムの効率が低下します。
私の以前のテストデータは、memcached のローカル読み取りおよび書き込み速度が直接 PHP メモリ配列よりも数十倍遅いことを示しましたが、APC および共有メモリ メソッドは直接配列と同様です。ローカルレベルのキャッシュのみの場合、memcached の使用は非常に不経済であることがわかります。
Memcached はデータベースのフロントエンド キャッシュとしてよく使用されます。 SQL 解析、ディスク操作、その他のオーバーヘッドがデータベースよりもはるかに少なく、メモリを使用してデータを管理するため、大規模なシステムではデータベースを直接読み取るよりも優れたパフォーマンスを実現できます。多くの場合、memcached によりデータベースの負荷が大幅に軽減され、システムの実行効率が向上します。さらに、memcached はサーバー間でデータを共有するための記憶媒体としてよく使用されます。たとえば、SSO システムでシステムのシングル サインオン状態を保存するデータを memcached に保存し、複数のアプリケーションで共有できます。
memcached はデータの管理にメモリを使用するため、サーバーが再起動されるか memcached プロセスが終了するとデータが失われるため、memcached を使用してデータを永続化することはできないことに注意してください。多くの人は、memcached のパフォーマンスがメモリとハードディスクの比較と同様に非常に優れていると誤解しています。実際、memcached の実際のボトルネックはネットワークにあります。ディスクデータベースシステムと比較して、過剰なオーバーヘッドがなく、直接読み書きする方法がないため、非常に大量のデータを簡単に処理できるという利点があります。多くの場合、2 ギガビットのネットワーク帯域幅があり、それらはすべて完全にロードされており、memcached プロセス自体は多くの CPU リソースを占有しません。