How to cache in Symfony 2? How to cache in Symfony 2? symfony symfony

How to cache in Symfony 2?


If you are using Doctrine already just use those cache classes.

Add a service to config.yml:

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

And use it in your controller:

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


Simple way use Doctrine cache providers.At first, register service(sample in config.yml):

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

Then to use get service, for example in controler:

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

to send in another service use calls:

calls:    - [ setCacheProvider, [@memcached_cache] ]

or arguments:

arguments:    - @memcached_cache

In the same way, you can use other interfaces of Doctrine Cache package.Doctrine Cache provides a very simple interface for which several out of the box implementations are provided:

  • ApcCache (requires ext/apc)
  • ArrayCache (in memory, lifetime of the request)
  • FilesystemCache (not optimal for high concurrency)
  • MemcacheCache (requires ext/memcache)
  • MemcachedCache (requires ext/memcached)
  • PhpFileCache (not optimal for high concurrency)
  • RedisCache.php (requires ext/phpredis)
  • WinCacheCache.php (requires ext/wincache)
  • XcacheCache.php (requires ext/xcache)
  • ZendDataCache.php (requires Zend Server Platform)

If you do not already use Doctrine, you may require Common Library for Doctrine projects: php composer.phar require doctrine/common or require only Caching library offering an object-oriented API for many cache backends: php composer.phar require doctrine/cache

How to use Doctrine Caching you can read in Doctrine Common documentation on Doctrine Project web site