November 2, 2016 Javier Eguiluz

Added a new "Null" adapter¶ Contributed by

Titouan Galopin

in #18825. The new Symfony\Component\Cache\Adapter\NullAdapter is a special cache adapter that disables the cache (it loses all the items saved on it and it returns false for all the read and save operations). This adapter is mostly useful for tests.

Added a faster file system adapter¶ Contributed by

Piotr Stankowski and Nicolas Grekas

in #18894. The new Symfony\Component\Cache\Adapter\PhpFilesAdapter is very similar to the existing FilesystemAdapter but it has a better performance when using OPcache in the server. The trick is that when items are saved, the new adapter creates a PHP file that is included during the fetch() operations. This allows OPcache to cache those files in its memory. In our benchmarks, PhpFilesAdapter was 3.5 times faster than FilesystemAdapter for read operations but a bit slower for write operations, so it's mostly meant for data that rarely changes.

Added a new PDO and Doctrine DBAL adapter¶ Contributed by

Nicolas Grekas

in #19519. The new Symfony\Component\Cache\Adapter\PdoAdapter allows to use any DBAL-compatible database as the storage of your cache. Its implementation heavily borrows from PdoSessionHandler . For example, to create a SQLite-based cache, execute the following: 1 2 3 4 5 use Symfony\Component\Cache\Adapter\PdoAdapter ; $dbFilePath = tempnam ( sys_get_temp_dir (), 'sf_sqlite_cache' ); $pool = new PdoAdapter ( 'sqlite:' . $dbFilePath ); $pool -> createTable ();

Added a generic tag-aware adapter¶ Contributed by

Nicolas Grekas

in #19524. Tag-based invalidation is one of the mechanisms provided by Symfony to invalidate caches, which is the process of removing all cached items related to a change in the state of your model. In Symfony 3.2, a new Symfony\Component\Cache\Adapter\TagAwareAdapter class and Symfony\Component\Cache\Adapter\TagAwareAdapterInterface interface allow to transform any cache adapter into a tag-aware adapter. The constructor of the TagAwareAdapter class accepts two arguments: the first one is the cache adapter used to store the items and the second optional argument is the adapter used to cache the tags. This allows you for example to use a file system or database cache for storing large items and to use a Redis cache for the tags to have ultra-fast invalidation checks: 1 2 3 4 5 6 7 8 use Symfony\Component\Cache\Adapter\TagAwareAdapter ; use Symfony\Component\Cache\Adapter\FilesystemAdapter ; use Symfony\Component\Cache\Adapter\RedisAdapter ; $cache = new TagAwareAdapter ( new FilesystemAdapter (), new RedisAdapter ( 'redis://localhost' ) );