Archive for the ‘alta performance’ Category

Utilizando o cache de plugins do Zend Framework

Friday, November 28th, 2008

Buenas pessoal, hoje a idéia é falar sobre o cache de plugins do Zend Framework, muito útil para acelerar um pouco o tempo de processamento e resposta por parte do servidor, é muito simples como o resto do framework, você só precisa criar um diretório para armazenar o cache, e acrescentar algumas linhas ao seu bootstrap.

Crie um diretório com um nome qualquer (ao alcance do bootstrap), eu chamei ele de cache, e insira o seguinte código ao seu bootstrap:

$classFileIncCache = {caminho da pasta cache} . 'pluginLoaderCache.php';
if( file_exists($classFileIncCache) ){
	include_once $classFileIncCache;
}
Zend_Loader_PluginLoader::setIncludeFileCache($classFileIncCache);

Após isso o Zend mesmo irá tomar conta de criar o arquivo pluginLoaderCache.php para você e inserir o conteúdo. Não se esqueça de dar permissão de escrita na pasta cache.

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb

Guardar Sessões em Cache com Zend Framework e Memcached

Thursday, November 27th, 2008

O post de hoje se dedica a aumentar a performance no armazenamento e recuperação de sessões, mais um dos estudos realizados pela nossa equipe e que foi implantado no nosso projeto. Ele consiste em pega a sessão do usuário e armazenar em um servidor de cache, no nosso caso o memcached.

A implementação é muito simples, você terá apenas que criar uma classe e mudar o modo que cria sua sessão, o resto permanece igual, pois é Zend_Session se encarrega de achar a sessão dentro do cache. Abaixo vai o código da nova classe que deve implementar a interface Zend_Session_SaveHandler_Interface.

class Xorna_SessionHandler implements Zend_Session_SaveHandler_Interface{

private $maxlifetime = 3600;

public $cache = '';	public function __construct($cacheHandler) {

$this->cache = $cacheHandler;

}

public function open($save_path, $name) {

return true;

}

public function close() {

return true;

}

public function read($id) {

if(!($data = $this->cache->load($id))) {

return '';

}

else {

return $data;

}

}

public function write($id, $sessionData) {

$this->cache->save($sessionData, $id, array(), $this->maxlifetime);

return true;

}

public function destroy($id) {

$this->cache->remove($id);

return true;

}

public function gc($notusedformemcache) {

return true;

}

}

?>

Bom, feito isso agora só precisamos instanciar isso, e criar a sessão:

Zend_Loader::loadClass('Xorna_SessionHandler');

$cache = Zend_Cache::factory('Core', 'Memcached', $frontendOptions, $backendOptions);

Zend_Session::setSaveHandler(new Xorna_SessionHandler($_cache));

Zend_Session::start();

Daqui em diante nada muda.

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb

MemCache no Windows e integração com o Wamp Server

Wednesday, November 26th, 2008

Mais um post sobre uso do WAMP (Windows, Apache, Mysql e PHP) como ambiente de desenvolvimento, dessa vez vou falar da instalação do memcache no windows, como integrá-lo ao ambiente e como ativá-lo. O trabalho envolvido nisso é muito simples, é só instalação e configuração.

Primeiramente vamos falar sobre o memcache, ele é um daemon, ou seja, um serviço que roda stand-alone na máquina, que utiliza uma ou mais portas, e que pode ser inicializado, parado e reinicializado conforme necessidades. Ao contrário da sessão do PHP, que é visível somente dentro do escopo de acesso do usuário (claro que existem maneira de compartilhar sessões), o memcache é visível dentro de toda aplicação, ou seja, se tivermos 100 usuários on-line, eles compartilharão o mesmo cache. O motivo pelo qual cheguei ao uso do memcache é a necessidade diária de ganhar performance mantendo a qualidade do sistema mantendo todas as suas funcionalidades, mas vamos parar por aqui e vamos colocar a mão na massa.

Instalação

  • Baixe os binários do memcache no site http://code.jellycan.com/memcached/ (pegue os binários win32).
  • Agora vamos à instalção propriamente dita:
  • Descompacte o conteúdo do arquivo onde desejar (eu usei c:memcache), você deverá ter os seguintes arquivos dentro da pasta:
  • memcache.exe
  • msvcr1.dll
  • Abra o terminal do windows =P
  • Instale o memcache com o seguinte comando: c:memcachememcache.exe -d install
  • Inicialize o serviço com o seguinte comando: c:memcachememcache.exe -d start

Agora com o memcache instalado e iniciado, vamos a configuração do WAMP Server, antes de mais nada é preciso fazer o download da dll do memcache para windows neste endereço: http://pecl4win.php.net/ext.php/php_memcache.dll. Feito isso vai la em c:wampinphpphp5.2.5ext e cole essa dll dentro, feche o WAMP, inicie-o novamente, clique com o botão esquerdo no icone do wamp > php > php extensions > habilite a extensão memcache. Pronto, agora é só fazer um teste com o script postado abaixo e está tudo certo.

// Exemplo extraído do site www.php.net

$memcache = new Memcache;

$memcache->connect("localhost",11211);echo "Server's version: " . $memcache->getVersion() . "n";

$tmp_object = new stdClass;

$tmp_object->str_attr = "test";

$tmp_object->int_attr = 123;

$memcache->set("key",$tmp_object,false,10);

echo "Store data in the cache (data will expire in 10 seconds)n";

echo "Data from the cache:n";

var_dump($memcache->get("key"));

?>

Após isso, está funcionando, mas temos um porém nessa história, por padrão o memcache utiliza o tamanho máximo de cache de 64mb, então caso queira aumentar essa capacidade, abra o regedit, vá em HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmemcached Server, encontre o item ImagePath e mude seu valor para: ?C:memcachedmemcached.exe? -d runservice -m 512. Pronto!

Bom, feito tudo isso espero ter unificado em português o que muitos sites em ingês dispersam.

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb
Clicky Web Analytics