В разрабатываемой версии мы переработали модули Cache и Logger — код стал проще, меньше и более функционален.
Модуль кеширования (Cache)
Реализован новый принцип работы с разными бекендами, теперь каждый бекенд представляет из себя отдельную сущность (наследуется от
ModuleCache_EntityBackend). Такой подход позволяет легко добавлять новые типы бекендов — достаточно создать сущность с нужным типом кеша, например, вот так выглядит XCache:
/**
* Бекенд xcache
*/
class ModuleCache_EntityBackendXcache extends ModuleCache_EntityBackend {
/**
* Проверяет доступность использования текущего бекенда
*
* @return mixed
*/
public function IsAvailable() {
if (extension_loaded('xcache')) {
return true;
}
return 'The xcache extension must be loaded for using this backend!';
}
/**
* Проверяет доступность использование мульти-get запросов к кешу (указывать сразу несколько ключей)
*
* @return mixed
*/
public function IsAllowMultiGet() {
return true;
}
/**
* Инициализация бекенда
*
* @param array $aParams
*
* @return mixed
*/
public function Init($aParams=array()) {
require_once(LS_DKCACHE_PATH.'Cache/Backend/TagEmuWrapper.php');
require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Xcache.php');
$aConfig=Config::Get('xcache');
$oCahe = new Zend_Cache_Backend_Xcache(is_array($aConfig) ? $aConfig : array());
if (isset($aParams['stats_callback'])) {
$this->oCacheBackend=new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,$aParams['stats_callback']));
} else {
$this->oCacheBackend=new Dklab_Cache_Backend_TagEmuWrapper($oCahe);
}
}
/**
* Получить значение из кеша
*
* @param string $sName Имя ключа
* @return mixed|bool
*/
public function Get($sName) {
return $this->oCacheBackend->load($sName);
}
/**
* Записать значение в кеш
*
* @param mixed $mData Данные для хранения в кеше
* @param string $sName Имя ключа
* @param array $aTags Список тегов, для возможности удалять сразу несколько кешей по тегу
* @param int|bool $iTimeLife Время жизни кеша в секундах
* @return bool
*/
public function Set($mData,$sName,$aTags=array(),$iTimeLife=false) {
return $this->oCacheBackend->save($mData,$sName,$aTags,$iTimeLife);
}
/**
* Удаляет значение из кеша по ключу(имени)
*
* @param string $sName Имя ключа
* @return bool
*/
public function Delete($sName) {
return $this->oCacheBackend->remove($sName);
}
/**
* Чистит кеши
*
* @param string $cMode Режим очистки кеша
* @param array $aTags Список тегов, актуально для режима Zend_Cache::CLEANING_MODE_MATCHING_TAG
* @return bool
*/
public function Clean($cMode=Zend_Cache::CLEANING_MODE_ALL,$aTags=array()) {
return $this->oCacheBackend->clean($cMode,$aTags);
}
}
На данный момент в стандартном комплекте идет поддержка File, XCache и Memcached. Также добавлены дополнительные бекенды — FileOrm и Life. FileOrm служит для отдельного файлового кеширования схем таблиц в БД, автоматически применяется в функционале ORM. Life — это сохранение данных на время выполнения скрипта, т.е. аналог паттерна Registry. Применяется он в методах GetLife и SetLife.
Читать дальше →