Кеширование

Содержание...

Фреймворк Webasyst предоставляет интерфейс для кеширования данных несколькими способами: в оперативной памяти (runtime), в файлах, а также дополнительные средства кеширования с использованием PHP-библиотеки memcached и PHP-акселератора XCache.

Кеширование в оперативной памяти

Для кеширования данных в оперативной памяти сервера часто достаточно использовать статические переменные в коде программного продукта. Если же ваш продукт сложный или если вы хотите использовать центральзованный системный инструмент доступа к таким переменным, то для организации кеширования данных в памяти используйте класс waRuntimeCache. Каждый экземпляр этого класса соответствует отдельной переменной-ключу, имя которой нужно указать в виде строки в качестве параметра, передаваемого в конструктор класса, например:

//ключ кеша должен содержать ID приложения,
// которое его использует, во избежание конфликтов имен ключей
$orders_cache = new waRuntimeCache('myapp_orders');

Методы класса waRuntimeCache

Файловое кеширование

Для хранения кешированных данных в файлах следует сохранять эти данные в директорию wa-cache/apps/[app_id]/, не допуская конфликтов доступа к файлам кеша между различными плагинами и приложениями.

Для удобства доступа к файлам кеша используйте PHP-классы waSerializeCache и waVarExportCache. Каждый экземпляр этих классов соответствует отдельному кеш-файлу. Разница между этими классами состоит в формате хранения данных:

waSerializeCache: результат выполнения функции serialize()
waVarExportCache: результат выполнения функции var_export()

Конструкторы этих классов принимают следующие параметры:

Методы классов waSerializeCache и waVarExportCache

Методы этих классов аналогичны метода класса waRuntimeCache, однако оперируют файлами вместо переменных-ключей.

Дополнительные средства кеширования

Для включения поддержки кеширования с помощью memcached или XCache необходимо создать конфигурационный файл wa-config/cache.php, как показано в примере:

<?php
return array(
    'default' => array(    //используйте ключ 'default' для того средства кеширования, которое должно использоваться по умолчанию
        'type' => 'memcached',    //обязательное указание типа адаптера кеша в нижнем регистре
        'servers' => array(    //список серверов memcached
            array(
                'host' => '',
                'port' => '',    //необязательный параметр, по умолчанию используется значение 11211
                'weight' => '',    //необязательный параметр, по умолчанию используется значение 0
            ),
            array(
                ...
            ),
        ),
    ),
    'alternative' => array(    //если нужна поддержка альтернативных способов кеширования, их параметры конфигурации добавляется с другими (произвольными) ключами
        'type' => 'xcache',    //кеширование с помощью акселератора XCache
        'prefix' => ...    //префикс XCache
    ),
    'alternative2' => array(
        'type' => 'file',    //файловое кеширование с использованием директории, отличной от используемой фреймворком по умолчанию
        'path' => '...',    //путь к директории для хранения к файлам кеша; отличный от стандартного пути wa-cache/apps/
    ),
);

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

Для получения доступа к механизму кеширования необходимо использовать экземпляр класса waCache с помощью метода wa('[app_id]')->getCache(), где для функции wa() стоит всегда указывать идентификатор приложения, к кешу которого необходимо обеспечить доступ, чтобы не полагаться на автоматическое определение текущего приложения и не допускать неопределенного поведения программы.

Если файл wa-config/cache.php отсутствует, то по умолчанию дополнительное кеширование не используется.

Если файл wa-config/cache.php создан, то при вызове метода wa('[app_id]')->getCache() по умолчанию возвращается экземпляр класса, соответствующий адаптеру кеширования, идентификатор которого указан в секции 'default' конфигурационного файла. В этом примере в качестве адаптера кеширования по умолчанию будет использоваться класс, использующий расширение memcached.

Стоит всегда проверять значение, возвращаемое методом wa('[app_id]')->getCache(). Если метод возвращает нулевое значение, дальнейшие попытки использовать методы кеширования будут бессмысленны.

Когда это необходимо в коде вашего приложения, в качестве параметра при вызове метода wa('[app_id]')->getCache() укажите ключ конфигурации другого (неосновного) адаптера кеша, чтобы использовать его вместо адаптера по умолчанию, например:

wa('[app_id]')->getCache('alternative')

Методы класса waCache