Symfony2: самостоятельное управление кешем
Кэш присутствует везде в вычислениях и, к счастью, в других местах. Без него время обработки было бы намного больше! В то время, когда все фреймворки, достойные этого названия, используют систему кэширования, зачем нам самим управлять кэшем?
резюме
Кэш в Symfony2
В Symfony2 вы можете легко настроить систему кэширования. Кроме того, если быть точным, похоже, что у Symfony есть собственная система кэширования (app/cache/окр/), и что мы также можем подключить систему кэширования на уровне сервера (Apache, IIS, …). Этот кэш полностью управляем, а память энергозависима. Как только сервер перезапускается, кеш сервера удаляется.
Кэширующие системы
Какие системы кэширования существуют? По памяти регулярно всплывают три программы.
- XCache
- Memcached
- APC
БТР сейчас устарела начиная с PHP 5.4, поэтому я не рекомендую его подключать.
В моем случае я буду использовать XCache. Вы также можете найти мой пост о том, как установить XCache.
Зачем управлять своим кешем самостоятельно
Я вижу несколько комментариев, которые приходят и спрашивают: «Почему? ". В то время как Doctrine позволяет вам легко использовать кеш с помощью своего метода useResultCache (использование, задержка, идентификатор). Мой ответ прост: делать бесплатные процедуры.
Небольшой пример, чтобы дать вам некоторые идеи. Допустим, я кэширую элемент из базы данных. Если я изменю этот объект, кеш не будет обновляться до тех пор, пока не истечет срок действия данных. Благодаря персонализированному управлению кэшем я смогу еще до того, как кэш достигнет отведенного времени, повторно установить новые данные и перезаписать старые. Это требует серьезного управления, но прирост производительности может быть существенным.
Symfony2 и как управлять собственным кешем
Я предлагаю вам этот небольшой код для заметок, чтобы им было легко управлять. В нашем случае функция этого Gist направлена на возврат результата SQL-запроса.
Прототип: выполнение функции ($sql_query, $id = null, $delay = 3600);
настройки:
- _sqlзапрос соответствует SQL-запросу, который вы хотите выполнить.
- id идентификатор, связанный с кэшированными данными. Для идентификатора x у вас будет контент x.
- задерживать это максимальное время, в течение которого вы даете кеш, будет действительным. По умолчанию 3600 секунд. Это означает, что после кэширования ваших данных они будут доступны в течение 3600 секунд.
12345678910111213141516171819202122232425262728функция выполнять ($sql_query, $id = null, $delay = 3600){// Объявляем экземпляр кеша$cacheDriver = new DoctrineCommonCacheXcacheCache();$ результаты = нуль;//Если был введен идентификатор и система кэширования содержит данные для идентификатора "x"if ($идентификатор!= нуль && $cacheDriver->содержит($id)) {//Затем берем кэшированные данные для ID "x"$results = $cacheDriver->fetch($id);}//Если данных нет, если кэшированные данные равны нулюif ($ результаты == нуль) {// Извлекаем данные$ результаты = $ Этой->контейнер->получить("доктрина")->getManager()->getRepository("NamespaceNameBundle: Объект")->найтиВсе();//Если у нас есть идентификатор кэшированияif ($идентификатор!= нуль) {//Сохраняем данные для ID x и задержки y$cacheDriver->save($id, $results, intval($delay));}}//Мы возвращаем результаты, ограничивая будущие запросывозвращение $ результаты;}
Ну, я надеюсь, что эта памятка поможет вам. До скорой встречи и спасибо, что прочитали этот пост!