Symfony2: самостоятельное управление кешем
Веб-агентство » Цифровые новости » Symfony2: самостоятельное управление кешем

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);
настройки:

  1. _sqlзапрос соответствует SQL-запросу, который вы хотите выполнить.
  2. id идентификатор, связанный с кэшированными данными. Для идентификатора x у вас будет контент x.
  3. задерживать это максимальное время, в течение которого вы даете кеш, будет действительным. По умолчанию 3600 секунд. Это означает, что после кэширования ваших данных они будут доступны в течение 3600 секунд.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    функция выполнять ($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));
    }
    }
    //Мы возвращаем результаты, ограничивая будущие запросы
    возвращение $ результаты;
    }

Ну, я надеюсь, что эта памятка поможет вам. До скорой встречи и спасибо, что прочитали этот пост!

★ ★ ★ ★ ★