1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Использование кэширования в аддонах для XF

Тема в разделе "Статьи по XenForo Framework", создана пользователем FractalizeR, 29.10.2010.

Загрузка
  1. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Все просто:
    PHP:
    $cache XenForo_Application::get('cache');
    $cache->save("Data to save in cache""CacheID");
    if(!
    $data $cache->load("CacheID")) {
      throw new 
    Exception("No value in cache! Probably expired!");
    }
    Время жизни объекта по умолчанию берется из config.php форума. Если нужно, можно указать свое:
    PHP:
    $cache->save("Data to save in cache""CacheID", array(), $secondsToCache);
    Если вместо $secondsToCache передать Null, то данные в кэше будут хранится максимально возможный промежуток времени.

    $cache является экземпляром Zend_Cache_Core, поэтому для нее доступны все указанные методы (документация)

    Данные, помещаемые в кэш, должны быть строкой (если не включена принудительно автоматическая сериализация). Поэтому если кэшируем результат запроса, его сначала нужно сериализовать (serialize).
     
    CyberAP и Romchik® нравится это.
  2. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Понятно, что все могу глянуть документацию, но насчет save пару слов:

    т.е. в примере
    PHP:
    $cache->save("Data to save in cache""CacheID", array(), $secondsToCache); 
    array() - это список тегов для кеша для последующего извлечения нескольких значений с одинаковым тегом. Очень удобная функция, но есть одно но - тегирование поддерживается не всеми бекэндами кеша, т.е. если будет нужен универсальный плагин, то придется отказаться от системы тегирования кеша вообще.
     
  3. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Я думаю, для 90% случаев достаточно чтения/записи из кеша по ключу + expiration.
     
  4. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Ну смотря для как использовать кеш :) Если привык к map/reduce, то использование тегирования кажется неплохим вариантом по сравнению с простым использованием кеша (key/value).
     
  5. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Если вы посмотрите на исходники ZF, вы увидите, что большая часть бекэндов кеширования (например, APC и Memcached) не поддерживает теги. При сохранении параметра с использованием тегов бекэнд выплюнет ошибку.
     
  6. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    как раз мемкеш должен поддерживать теги (по крайней мере пару лет назад поддерживал и это было бы странно если бы он перестал поддерживать). Вот xCache точно теги не поддерживает.
    --- добавлено : 31 окт 2010 в 12:33 ---
    Упс... туплю, я работал с патченным для поддержки тегов мемкешем :) (и соответственно с патченным классом зенда)
     
    FractalizeR нравится это.
  7. RouR

    RouR Местный

    Регистрация:
    21.03.12
    Сообщения:
    64
    Симпатии:
    9
    Версия XF:
    1.2.0
    хорошо бы в тему добавить информацию как эти бэкэнды включить для ксена. кто делал?
     

Поделиться этой страницей