Мне нужно кэшировать некоторые данные приложения, используя систему кэширования Symfony 2, чтобы я мог запускать cache:clear
чтобы очистить его. Весь кеш зависит от app/cache
но как я могу на самом деле перейти к кешированию данных?
http://symfony.com/doc/current/cookbook/index.html
Единственная тема, которую я вижу, – это кэширование HTML с помощью лака.
Если вы используете 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)); }
Простой способ использования провайдеров кэша Doctrine . Сначала зарегистрируйте службу (образец в 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: - [ setCacheProvider, [@memcached_cache] ]
или аргументы:
arguments: - @memcached_cache
Таким же образом вы можете использовать другие интерфейсы пакета Doctrine Cache. Doctrine Cache обеспечивает очень простой интерфейс, для которого предусмотрены несколько вариантов из коробки:
Если вы еще не используете Doctrine , вам могут потребоваться проекты Common Library for Doctrine : php composer.phar require doctrine/common
или требует только библиотеки Caching, предлагающей объектно-ориентированный API для многих кеш-серверов : php composer.phar require doctrine/cache
Как использовать Doctrine Caching вы можете прочитать в Доктрине Общая документация на веб-сайте Doctrine Project
Symfony 3.1 предоставляет новый компонент кэша .
Symfony2 не предоставляет компонент для кэширования прикладного уровня.
Как вам уже сказали, вы можете использовать библиотеку общего кэширования Doctrine Common http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/caching.html
Если вы хотите что-то более продвинутое, вы также можете использовать один из пакетов кешей, предоставленных сообществом. Например, https://github.com/TheBigBrainsCompany/TbbcCacheBundle#cachebundle, который предоставляет инструменты для хорошей стратегии кэширования.
В Symfony2 нет частичного кэша, встроенный кеш – только HTTP. Вы должны использовать обратный прокси, и если вы хотите только кэшировать часть кода, вам нужно использовать ESI. Это, возможно, больше работы, чем с symfony 1, но производительность стоит того.
Во всяком случае, ничто не мешает вам использовать memcached и хранить в нем какие-то вещи, посмотрите на это Bundle, то есть, если ваш вопрос задает вопрос, у вас есть только данные для хранения, это идеально (и кеш memcache намного быстрее, чем файловая система) ,