Фреймворк Webasyst предоставляет интерфейс для кеширования данных несколькими способами: в оперативной памяти (runtime), в файлах, а также дополнительные средства кеширования с использованием PHP-библиотеки memcached или PHP-акселератора XCache.
Кеширование в оперативной памяти
Для кеширования данных в оперативной памяти сервера часто достаточно использовать статические переменные в коде программного продукта. Если же ваш продукт сложный или если вы хотите использовать центральзованный системный инструмент доступа к таким переменным, то для организации кеширования данных в памяти используйте класс waRuntimeCache
. Каждый экземпляр этого класса соответствует отдельной переменной-ключу, имя которой нужно указать в виде строки в качестве параметра, передаваемого в конструктор класса, например:
//ключ кеша должен содержать ID приложения, // которое его использует, во избежание конфликтов имен ключей $orders_cache = new waRuntimeCache('myapp_orders');
Методы класса waRuntimeCache
get()
— получить значение переменной-ключа;set($value)
— установить значение для переменной-ключа;delete()
— удаление переменной-ключа;isCached()
— существует ли указанная переменная-ключ.
Файловое кеширование
Для хранения кешированных данных в файлах следует сохранять эти данные в директорию wa-cache/apps/[app_id]/
, не допуская конфликтов доступа к файлам кеша между различными плагинами и приложениями.
Для удобства доступа к файлам кеша используйте PHP-классы waSerializeCache
и waVarExportCache
. Каждый экземпляр этих классов соответствует отдельному кеш-файлу. Разница между этими классами состоит в формате хранения данных:
waSerializeCache
: результат выполнения функции serialize()
waVarExportCache
: результат выполнения функции var_export()
Конструкторы этих классов принимают следующие параметры:
$key
— имя кеш-файла без расширения .php$ttl
— необязательное целочисленное значение времени жизни кеша в секундах; по умолчанию = -1 (с таким значением по умолчанию кеш-файл всегда считается валидным)$app_id
— идентификатор приложения, к которому относится кеш-файл; если не указан, используется идентификатор текущего приложения, в коде которого используется класс
Методы классов waSerializeCache
и waVarExportCache
Методы этих классов аналогичны метода класса waRuntimeCache
, однако оперируют файлами вместо переменных-ключей.
get()
— получить кешированное значение; валидность кеш-файла проверяется с путем сравнения разности текущей метки времени и метки времени сохранения файла и значения времени жизни кеша ('ttl'
);set($value)
— записать данные в кеш-файл вместе со значением периода валидности кеша и текущей метки времени;delete()
— удалить кеш-файл;isCached()
— валиден ли кеш, хранящийся в файле.
Дополнительные средства кеширования
Для включения поддержки кеширования с помощью memcached или XCache необходимо создать конфигурационный файл wa-config/cache.php
, как показано в примере:
<?php return [ 'default' => [ //используйте ключ'default'
для того средства кеширования, которое должно использоваться по умолчанию 'type' => 'memcached', //обязательное указание типа адаптера кеша в нижнем регистре:'memcached'
или'xcache'
'namespace' => '...', //произвольный идентификатор для устранения конфликтов кеша между несколькими сайтами на одном сервере при использовании memcached 'prefix' => '...', //произвольный идентификатор для устранения конфликтов кеша между несколькими сайтами на одном сервере при использовании XCache 'servers' => [ //список серверов memcached [ 'host' => '', 'port' => '', //необязательный параметр, по умолчанию используется значение 11211 'weight' => '', //необязательный параметр, по умолчанию используется значение 0 ], [ ... ], ], ], 'alternative' => [ //если нужна поддержка альтернативных способов кеширования, их параметры конфигурации добавляется с другими (произвольными) ключами 'type' => 'xcache', //кеширование с помощью акселератора XCache 'prefix' => ... //префикс XCache ], 'alternative2' => [ '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
set($key, $value, $expiration = null, $group = null)
— сохранение кешированного значения$key
— ключ кешированного значения$value
— данные, которые нужно сохранить в кеше$expiration
— неотрицательное целочисленное значение периода времени в секундах, в течение которого кешированное значение должно считаться действительным (валидным); если значение указанного формата отсутствует, то записываемое в кеш значение считается валидным вне зависимости от периода времени, прошедшего с момента его записи$group
— необязательный идентификатор группы, в которой должно храниться кешированное значение
get($key, $group = null)
— чтение кешированного значенияdelete($key, $group = null)
— удаление кешированного значенияdeleteGroup($group)
— удаление группы кешированных значенийdeleteAll()
— удаление всего (дополнительного) кеша данного приложения