Memcached + Doctrine + Zend Framework
Совмещаем все это вместе, получаем неплохое ускорение работы доктрины.
Ставим memcached
Как Установить Memcached на windows?
- качаем отсюда бинарник http://code.jellycan.com/memcached/
- ложим в c:\memcached (или другой путь)
- из консоли инсталим как сервис c:\memcached\memcached.exe -d install
Установка под *nix ищется на ура в гугли.
bootstrap
(привожу весь код инитера доктрины)
/* * Init Doctrine */ protected function _initDoctrine() { $config=$this->getOption('database'); require_once 'Doctrine.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Doctrine'); try { Doctrine_Manager::connection("mysql://".$config['params']['username'].":".$config['params']['password']."@".$config['params']['host']."/".$config['params']['dbname'])->setCharset($config['charset']); } catch (Exception $e) { echo 'FATAL ERROR: MySql is down'; exit; } Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESSIVE); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true); Doctrine::loadModels(APPLICATION_ROOT . "/models"); // Install Tables Doctrine::createTablesFromModels(APPLICATION_ROOT . "/models"); // Cache $configCache=$this->getOption('cache'); // Clearer -------------------------------------------------------- $memcache_obj = new Memcache; $con=$memcache_obj->connect($configCache['host'], $configCache['port']); if ($con==FALSE) { echo 'FATAL ERROR: MemCache is down'; exit; } //$memcache_obj->flush(); // отчистка кеша // --------------------------------------------------------------- $servers = array( 'host' => $configCache['host'], 'port' => $configCache['port'], 'persistent' => true ); $cacheDriver = new Doctrine_Cache_Memcache(array( 'servers' => $servers, 'compression' => false ) ); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE, $cacheDriver); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE_LIFESPAN, 3600); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE, $cacheDriver); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE_LIFESPAN, 3600); }
Все проинииализили и сказали Doctrine что нужно использовать memcache при запросах и выдачи результата
Если у вас в проекте есть Zend_Translate то подцепляем и его:
$configCache=$this->getOption('cache'); $backendOptions=array( 'host' => $configCache['host'], 'port' => $configCache['port'], 'persistent' => true ); $cache = Zend_Cache::factory('Core', 'Memcached', $frontendOptions, $backendOptions); Zend_Translate::setCache($cache);
везде используются данные из конфига (ini) вот кусок:
; cache memcached cache.host = localhost cache.port = 11211
Запросы
1. После тестов, прямые запросы (DQL) выполняются намного шустрей, т.е.:
$q = Doctrine_Query::create() ->select('id, url') ->from('NewsCategories'); $newsCategories= $q->execute()->toKeyValueArray("id","url");
Намного шустрей чем удобное
$newsCategories=Doctrine::getTable("NewsCategories")->findAll()->toKeyValueArray("id","url");
и плюс, в последнем запросе нельзя указывать что нужно использовать кеш (!!!)
теперь все свои запросы приводим в вид «юзай кеш»
$q = Doctrine_Query::create() ->select('id, url') ->from('NewsCategories') ->useCache(); $newsCategories= $q->execute()->toKeyValueArray("id","url");
все =)
Уникальных посетителей темы: 189Zend Server beta 1
Сегодня Zend выпустил новый продукт, Zend Server beta1 ! Если кратко, то это «подобие» xampp, denwer и т.д. но от самой Zend.
В данный продукт включены следующие компненты:
- Apache 2.2.8
- PHP 5.2.8
- Zend Framework 1.7.4
- PHP optimizer и кучу других продуктов Zend
- Админский интерфейс для быстрой настройки и работы.
Продукт доступен для windows, linux и macOS в двух редакциях:
- Zend Server – после beta он будет выпушен как отдельный коммерческий продукт и будет платным
- Zend Server CE – бесплатный сервер для разработчиков (он не станет платным)
Для получения информации о продукте, перейдите по ссылке.
Уникальных посетителей темы: 6