Как кешировать в Symfony 2?
Мне нужно кэшировать некоторые данные приложения, используя систему кэширования Symfony 2, чтобы я мог запустить cache:clear
, чтобы очистить ее. Все кеширование зависит от app/cache
, но как я могу действительно кэшировать данные?
http://symfony.com/doc/current/cookbook/index.html
Единственное, что я вижу, - это кэширование HTML с помощью лака.
Ответы
Ответ 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
Ответ 3
Symfony 3.1 предоставляет новый компонент кэша.
Ответ 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 намного быстрее, чем файловая система).