Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Если вы используете 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));
}

Ответ 2

Простой способ использования поставщиков кэша 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 (не оптимальный для high concurrency)
  • MemcacheCache (требуется ext/memcache)
  • MemcachedCache (требуется ext/memcached)
  • PhpFileCache (не оптимальный для high concurrency)
  • RedisCache.php(требуется ext/phpredis)
  • WinCacheCache.php(требуется ext/wincache)
  • XcacheCache.php(требуется ext/xcache)
  • ZendDataCache.php(требуется платформа сервера Zend)

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

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

Ответ 4

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

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

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

Ответ 5

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

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