web-dev-qa-db-ja.com

Memcachedと組み合わせてトランジェントを使用する

Memcachedでトランジェントを使用することになると、誰かが私のために空気をきれいにしてくれることを願っていました。

W3-total-cacheのようなプラグインを実行するとき、大きなポストクエリを格納するためにトランジェントを使用することに実際のパフォーマンス上の利点はありますか? memcachedを実行している場合、クエリはすでにmemcachedに正しくキャッシュされているでしょうか。それで、もしあれば、これら二つの方法を一緒に使うことの利点は何ですか?

6
Colin Morgan

いつ、どのようにトランジェントまたはオブジェクトキャッシュを使用するかは、少し面倒でサイトに依存します。内訳は次のとおりです。

  1. (memcachedのように)永続オブジェクトキャッシュを使用しない場合:

    • トランジェントはデータベースに保存されます
    • オブジェクトキャッシュ内のオブジェクトは、ページリクエストの間だけキャッシュされます。
  2. (memcachedのように)永続オブジェクトキャッシュを使用する場合

    • トランジェントはオブジェクトキャッシュに格納されます
    • オブジェクトキャッシュ内のオブジェクトは永続オブジェクトキャッシュにキャッシュされるため、ページ要求全体で使用できます。

そうです、memcachedを使用している場合は、一時的にトランジェントを使用すると作業が速くなります。ただし、最初からmemcachedを使用していることがわかっている場合は、一時的な操作をしないでオブジェクトキャッシュを直接使用することができます。

これらを使用するための適切な時期は、このようになります。

公開されているコードの場合

  • 生成/取得に時間がかかり、一時的な期限が切れると再生成または再取得される可能性があるものをすべて格納する必要がある場合は、一時的なものを使用します。これはデータベースに格納されている可能性があるので、データベースからすでに取得しているものには使用しないでください。たとえクエリがたくさんの結合などを含む大きなものであっても、あなたは非常にわずかな時間を節約できます。これについてはデータベースの情報に頼ってください。代わりにクエリを最適化してください。

  • オブジェクトキャッシュを使用して、おそらく同じページの実行中であっても頻繁に必要となる可能性がある大きなクエリの個々の結果(投稿、ユーザーなど)を格納します。

これがあなたが(カスタム)コントロールできるカスタムサイトのためのカスタムコードで、あなたが知っているそれがmemcachedを使っている)ならば、トランジェントとオブジェクトキャッシュは基本的に同じもので、わずかに異なるインタフェースを持ちます。 wp_cache_setとwp_cache_getは、このような状況では非常にうまく機能しますが、わずかな量のオーバーヘッドトランジェントを追加する必要はありません。

マルチサイトの場合、オブジェクトキャッシュには「グローバルグループ」という利点があります。これは、サイトのネットワーク全体でグローバルと見なされる特定のグループ(wp_cache_setの3番目のパラメータ)です。 wp_cache_add_global_groups()を使用してグローバルグループにグループを追加できます。

たとえば、usersテーブルはとにかく共有されているため、ユーザーはグローバルにマルチサイトにグループ化されています。そのため、1つのサイトにロードされたユーザーは永続オブジェクトキャッシュに入れられ、ユーザーIDでキー入力され、システム上の他のすべてのサイトでメモリキャッシュにすぐにアクセスできるため、パフォーマンスが向上します。つまり、それらはグローバルなものです。これによりパフォーマンスが大幅に向上し、ネットワーク全体のデータが必要な場合にswitch_to_blogを頻繁に変更する必要がなくなります。たとえば、最新の投稿プラグインがグローバルグルーピングを使用して最新の投稿をオブジェクトキャッシュに保存すると、ネットワーク上のすべてのサイトが検索することなく即座にその情報を知ることができます。共有メモリキャッシュ.

TL; DR:あなたが物事をする方法はあなたの特定のユースケースとあなたがあなたの特定の設定を共有しないかもしれない一般大衆にコードを利用可能にすることを計画しているかどうかに大きく依存します。

10
Otto

W3TCは、以下のようなさまざまなことを行います。

  • データベースクエリのキャッシュ
  • オブジェクトキャッシュの実装(トランジェントが使用).

これらは2つのまったく別のプロセスです。

個々のデータベースクエリをトランジェントでキャッシュすることは、memcachedやW3TCがあってもなくてもあまり意味がありません。トランジェントは、中間のステップではなく、フラグメントキャッシュの最終的な操作結果(HTMLコードの塊など)に最も適しています。

2
Rarst