web-dev-qa-db-ja.com

Wp_cacheはどのように機能しますか。また、パフォーマンスに役立ちますか?

私は最近のcommentsウィジェットをコーディングしていて、$ wpdb-> get_resultsを使用していましたが、ページがロードされるたびにクエリが実行されないようにキャッシュを使用したいので、使用しました。

$comments = wp_cache_get('mycomments');
if ($comments == false) {
    $query = //some sql stuff
    $comments = $wpdb->get_results($query);
    wp_cache_set('mycomments', $comments);
}
//then use $comments

そして、私はWP Cache Inspectプラグインを使ってそれが機能しているかどうかチェックし、 '9999'と9999の2つの方法でwp_cache_setの$ expire値を設定してみました私のために働くために、私は記事にコメントし、それが9999秒間クエリをキャッシュしていないようですそれは最近のコメントですぐに示したので、これはどのように機能することになっているのでしょうか。

そして事前に感謝します。

編集:私はまた トランジェントAPI があるコーデックスをチェックしていた/しかし45文字に制限されているので、これとwp_cacheの違いは何ですか?これはデータベースにデータを保存するようです。

4
Pierre

WordPress v2.5以降では、オブジェクトキャッシュは永続的ではありません。それはメモリの中で物事を節約するでしょう、しかしページロードを渡って持続的なキャッシングのためにあなたはここで見るプラグインを必要とするでしょう:

http://codex.wordpress.org/Class_Reference/WP_Object_Cache#Persistent_Caching

あるいは、持続的なトランジェントを使用してください。 IDは45文字以下でなければなりませんが、そのIDに付加されたデータはもっと長くてもかまいません。この方法で大量のデータを保存することはお勧めできません。

4
Tom J Nowell

wp_cache_set/add関数はあなたが手動でキャッシュからデータを削除するか、キャッシュコレクターが破壊されるまでのどちらか早いほうまであなたのためにデータを保存します。

デフォルトではWPはこのデータを配列変数の中に格納するので、コレクターはページがロードされるたびに破壊されます。

取得したデータを変更する操作の後にキャッシュをフラッシュすることを忘れないでください。あなたのケースでは、コメントのために新しいコメントが追加されたときにあなたのキャッシュをクリアしたいかもしれません:

add_action('comment_post', function(){
  wp_cache_delete('mycomments');
});
1
onetrickpony