web-dev-qa-db-ja.com

Symfony 2でキャッシュする方法は?

cache:clearを実行してクリアできるように、Symfony 2のキャッシュシステムを使用してアプリケーション固有のデータをキャッシュする必要があります。すべてのキャッシュはapp/cacheに依存していますが、実際にデータをキャッシュするにはどうすればよいですか?

http://symfony.com/doc/current/cookbook/index.html

私が見る唯一のトピックは、VarnishによるHTMLキャッシングについてです。

42
Tower

Doctrine=を使用している場合は、すでにこれらのキャッシュクラスを使用してください。

サービスをconfig.ymlに追加します:

services:
    cache:
        class: Doctrine\Common\Cache\ApcCache

そして、それをコントローラーで使用します:

if ($fooString = $this->get('cache')->fetch('foo')) {
    $foo = unserialize($fooString);
} else {
    // do the work
    $this->get('cache')->save('foo', serialize($foo));
}
78
Kris Wallsmith

簡単な使用方法Doctrineキャッシュプロバイダー。最初に、service(config.ymlのサンプル)を登録します。

services:
    memcached:
        class: Memcached
        calls:
            - [ addServer, ['localhost', 11211] ]
    memcached_cache:
        class: Doctrine\Common\Cache\MemcachedCache
        calls:
            - [ setMemcached, [@memcached] ]

次に、例えばコントローラーでgetサービスを使用するには:

$cache = $this->get('memcached_cache');

別のサービスで送信するにはcallsを使用します。

calls:
    - [ setCacheProvider, [@memcached_cache] ]

または引数:

arguments:
    - @memcached_cache

同様に、Doctrine Cacheパッケージの他のインターフェイスを使用できます。 Doctrine Cacheは、いくつかのすぐに使用可能な実装が提供される非常にシンプルなインターフェースを提供します。

  • ApcCache(ext/apcが必要)
  • ArrayCache(メモリ内、リクエストの有効期間)
  • FilesystemCache(高い同時実行性には最適ではありません)
  • MemcacheCache(ext/memcacheが必要)
  • MemcachedCache(ext/memcachedが必要)
  • PhpFileCache(高い同時実行性には最適ではありません)
  • RedisCache.php(ext/phpredisが必要)
  • WinCacheCache.php(ext/wincacheが必要です)
  • XcacheCache.php(ext/xcacheが必要)
  • ZendDataCache.php(Zend Serverプラットフォームが必要)

Doctrineをまだ使用していない場合、Doctrineプロジェクトの共通ライブラリが必要な場合がありますphp composer.phar require doctrine/commonまたはrequire only多くのキャッシュバックエンド向けのオブジェクト指向APIを提供するキャッシュライブラリphp composer.phar require doctrine/cache

Doctrineキャッシュの使用方法 Doctrine Common documentation on Doctrine Project web site

Symfony 3.1は新しい キャッシュコンポーネント を提供します。

10
Alsatian

Symfony2は、アプリケーション層のキャッシュ用のコンポーネントを提供しません。

既に説明したように、Doctrine Commonキャッシングライブラリ http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference /caching.html

さらに高度なものが必要な場合は、コミュニティが提供するキャッシュバンドルのいずれかを使用することもできます。たとえば、 https://github.com/TheBigBrainsCompany/TbbcCacheBundle#cachebundle は、優れたキャッシュ戦略のためのツールを提供します。

8
Benjamin

Symfony2には部分的なキャッシュはありません。ビルドインキャッシュは完全なHTTPのみです。リバースプロキシを使用する必要があり、コードの一部のみをキャッシュする場合は、ESIを使用する必要があります。 symfony 1を使用するよりも作業が多いかもしれませんが、それだけの価値はあります。

とにかく、memcachedを使用して何かを保存するのを止めるものは何もありません。 このバンドルで つまり、質問のとおり、保存するデータしかなければ、完璧です(そしてmemcacheキャッシュはファイルシステムよりもはるかに高速です)。

0
Damien