やったこと

webサービスを作るときに考えたことを垂れ流します

【CakePHP3】ページネーション処理にキャッシュを効かせる!

CakePHP3の「ページネーション処理(Paginate機能)」の結果をキャッシュとして保存する方法です。

以下のように「検索クエリ」作成時に検索結果をキャッシュ保存する旨を書き込んでおきます。

//クエリを作成
$query = $this->Tweets->find()
              ->where(['post_id' => $post_id])
              ->order(['post_index' => 'asc'])
              ->cache("testestes", "long"); //キャッシュ保存する!

//ページネーション情報を作成
$tweets = $this->paginate($query);


これで「testestes」というキー名で、検索結果がキャッシュされます。

動作としては、もし「testestes」というキャッシュがすでに存在すればそのキャッシュの内容をロードして、「testestes」が存在しなければ新たにそのキャッシュを作成します。

このキャッシュ処理の注意点は、ここでキャッシュとして保存される内容は、もし「$paginate = ['limit' => 10]」みたいに設定していたとしたら、そのページで表示される10件分の結果しか保存されないということです。なので「1ページ目」だけではなく、ちゃんと「2ページ目」「3ページ目」の内容も別キャッシュとして保存しないといけないということです(まあ当たり前のことですね・・)。

ちなみに「long」と書いてあるのは、私が作ったオリジナルキャッシュの設定名のことです。これを省略すると通常の「default」の設定でキャッシュが保存されます。

自分専用のキャッシュ設定をする方法は、以前私が書いた「【CakPHP3】クリアしてもキャッシュが消えない! - やったこと」の記事をご参照ください。

以上です!