Как кешировать в Symfony 2? - PullRequest
       5

Как кешировать в Symfony 2?

42 голосов
/ 17 января 2012

Мне нужно кэшировать некоторые данные, относящиеся к конкретному приложению, используя систему кэширования Symfony 2, чтобы я мог запустить cache:clear, чтобы очистить их. Весь кеш опирается на app/cache, но как мне на самом деле кешировать данные?

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

Единственная тема, которую я вижу, - это кэширование HTML с помощью Varnish.

Ответы [ 5 ]

78 голосов
/ 17 января 2012

Если вы уже используете 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));
}
33 голосов
/ 29 июля 2013

Простой способ использования Поставщики кеша 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 предоставляет очень простой интерфейс, для которого предусмотрено несколько готовых реализаций:

  • 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 Platform)

Если вы еще не используете Doctrine , вам может потребоваться Общая библиотека для проектов Doctrine : php composer.phar require doctrine/common или только Библиотека кэширования, предлагающая объектно-ориентированный API для много серверных кешей : php composer.phar require doctrine/cache

Как использовать Doctrine Caching, вы можете прочитать в Общая документация Doctrine на Веб-сайт Doctrine Project

10 голосов
/ 01 августа 2016

Symfony 3.1 предоставляет новый компонент кэша .

8 голосов
/ 23 апреля 2014

Symfony2 не предоставляет никаких компонентов для кэширования на уровне приложений.

Как вы уже сказали, вы можете использовать общую библиотеку кэширования Doctrine http://docs.doctrine -project.org / projects / doctrine-common/en/latest/reference/caching.html

Если вы хотите что-то более продвинутое, вы также можете использовать один из пакетов кэша, предоставленных сообществом.Например, https://github.com/TheBigBrainsCompany/TbbcCacheBundle#cachebundle, который предоставляет инструменты для хорошей стратегии кэширования.

0 голосов
/ 17 января 2012

В Symfony2 нет частичного кеша, встроенный кеш заполнен только HTTP.Вы должны использовать обратный прокси-сервер, и если вы хотите кэшировать только часть кода, вы должны использовать ESI.Возможно, это больше, чем с Symfony 1, но производительность того стоит.

В любом случае, ничто не мешает вам использовать memcached и хранить в нем некоторые вещи, посмотрите на этот пакет , т. Е. Если ваш вопросконстатируйте, у вас есть только данные для хранения, и это прекрасно (а кеш в memcache намного быстрее, чем в файловой системе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...