J'ai besoin de mettre en cache certaines données spécifiques à l'application à l'aide du système de mise en cache de Symfony 2 afin de pouvoir exécuter cache:clear
pour l'effacer. Tout le cache repose sur app/cache
mais comment dois-je procéder pour mettre les données en cache?
http://symfony.com/doc/current/cookbook/index.html
Le seul sujet que je vois concerne la mise en cache HTML avec Varnish.
Si vous utilisez Doctrine utilisez déjà ces classes de cache.
Ajouter un service à config.yml
:
services:
cache:
class: Doctrine\Common\Cache\ApcCache
Et utilisez-le dans votre contrôleur:
if ($fooString = $this->get('cache')->fetch('foo')) {
$foo = unserialize($fooString);
} else {
// do the work
$this->get('cache')->save('foo', serialize($foo));
}
Utilisation simple Fournisseurs de cache de doctrine . Dans un premier temps, enregistrez le service (exemple dans config.yml):
services:
memcached:
class: Memcached
calls:
- [ addServer, ['localhost', 11211] ]
memcached_cache:
class: Doctrine\Common\Cache\MemcachedCache
calls:
- [ setMemcached, [@memcached] ]
Ensuite pour utiliser get service, par exemple dans controler:
$cache = $this->get('memcached_cache');
pour envoyer un autre service, utilisez - appels:
calls:
- [ setCacheProvider, [@memcached_cache] ]
ou arguments:
arguments:
- @memcached_cache
De la même manière, vous pouvez utiliser d'autres interfaces de Doctrine Cache package. Doctrine Cache fournit une interface très simple pour laquelle plusieurs implémentations prêtes à l'emploi sont fournies) :
Si vous n'utilisez pas déjà Doctrine , vous devrez peut-être Bibliothèque commune pour Doctrine = projets : php composer.phar require doctrine/common
ou requiert uniquement une bibliothèque de mise en cache offrant une API orientée objet pour de nombreux backends de cache : php composer.phar require doctrine/cache
Comment utiliser Doctrine Caching que vous pouvez lire dans Doctrine Common documentation sur site Web de Doctrine Project
Symfony 3.1 fournit un nouveau composant Cache .
Symfony2 ne fournit aucun composant pour la mise en cache de la couche application.
Comme on vous l'a déjà dit, vous pouvez utiliser la Doctrine bibliothèque de mise en cache commune http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference /caching.html
Si vous voulez quelque chose de plus avancé, vous pouvez également utiliser l'un des bundles de cache fournis par la communauté. Par exemple, le https://github.com/TheBigBrainsCompany/TbbcCacheBundle#cachebundle qui fournit des outils pour une bonne stratégie de mise en cache.
Il n'y a pas de cache partiel dans Symfony2, le cache intégré est uniquement HTTP complet. Vous devez utiliser un proxy inverse et si vous souhaitez uniquement mettre en cache un morceau de code, vous devez utiliser ESI. C'est peut-être plus de travail qu'avec symfony 1 mais les performances en valent la peine.
Quoi qu'il en soit, rien ne vous empêche d'utiliser un memcached et d'y stocker des trucs, regardez dans ce Bundle ie si comme votre question l'indique, vous n'avez que des données à stocker, c'est parfait (et un cache memcache est beaucoup plus rapide qu’un système de fichiers).