symfonyでのキャッシュ管理

このブログを作るにあたり、frontendとbackend間でのキャッシュ管理をどうするかで躓きました。
記事を足したり変えたりしたらキャッシュはクリアしたい。でも記事編集はbackendの仕事。
公式を見ると、マニュアルでダイレクトにファイルやフォルダを削除している方法があるけど…。
でももっと良い方法があるでしょ。ということでその方法をメモ。

1. sfSQLiteCacheを使用する

FileCacheのが表示は速いんだろうケド、削除処理になるとパフォーマンスが下がるよね。なにより開発が途端にややこしくなる。

その点SQLiteキャッシュなら、cleanメソッドのソースを覗けば分かるとおり、あいまい検索で削除が可能!柔軟なキャッシュ管理ができます。

2. キャッシュファイルを共有

factories.ymlのview_cacheのdatabaseパラメータを、backend、frontend共通にする。

これでどちらからでも同じキャッシュデータベースにアクセス可能になります。

factories.yml

all:
  view_cache:
    class: sfSQLiteCache
    param:
      automaticCleaningFactor: 0
      database:               %SF_ROOT_CACHE_DIR%/%SF_ENVIRONMENT%_cache.db

settings.yml (ONにしないとViewCacheManagerからキャッシュ管理オブジェクトが拾えない)

all:
  .settings:
    cache:                  on

キャッシュの削除方法はこんな感じ

//全削除
$this->getContext()->getViewCacheManager()->getCache()->clean();
 
// LIKE '%blog/%'
$this->getContext()->getViewCacheManager()->getCache()->clean("%blog/");