Maneiras de implementar um caching engine eficaz e eficiente
Almir Neto – [email protected]
PHP Conference Brazil 2009
http://www.phpconf.com.br
Osasco, 27 de Novembro de 2009
Grupo de Desenvolvedores PHP de Goiás
● Lista de Discussão● Troca de Conhecimentos● Encontros● Palestras● Eventos● http://www.php.org.br● http://www.gophp.com.br
Maneiras de implementar um caching engine eficaz e eficiente
Maneiras de implementar um caching engine eficaz e eficiente
Almir Neto - @[email protected]
O que é cache?
Cache é um dispositivo de acesso rápido, que tem como objetivo aumentar a
performance de aplicações
Maneiras de implementar um caching engine eficaz e eficiente
Para que utilizar cache no PHP?Ao realizar cache de uma página PHP o
usuário irá acessar diretamente o arquivo HTML.
Com isso o tempo gasto com o processamento da página é nulo.
Almir Neto - @[email protected]
Maneiras de implementar um caching engine eficaz e eficiente
Tipos de Cache
Almir Neto - @[email protected]
• Cache de Dados- Cache de informações contidas em um banco
de dados ou em um objeto
• Cache de Páginas- Cache no qual a página inteira é armazenada
na memória
Maneiras de implementar um caching engine eficaz e eficiente
Como implementar Cache?
• APC• Memcached• Smarty• Maneira Rasmus Lerdorf de implementar Cache
Maneiras de implementar um caching engine eficaz e eficiente
APC - Alternative PHP Cache
Almir Neto - @[email protected]
- Extensão do PECL- Instalação via linha de comando- Possibilita armazenar variáveis no cache, e recuperar essas informações posteriormente.- As informações adicionadas no cache persistirão entre requisições até que sejam removidas.- Ideal para armazenar cache de informações com poucas mudanças em sistemas com grande número de alterações das informaçõesExemplo: Tabelas de apoio, como UF, Cidade, CEP, etc- Simples utilização
Maneiras de implementar um caching engine eficaz e eficiente
Almir Neto - @[email protected]
Memcached- Extensão do PECL- Sistema distribuído de cacheamento de recursos- Tem o objetivo de reduzir a carga no banco de dados - Possibilidade de adicionar vários servidores, cada um com um “peso”- Utilização parecida com o APC- Possibilidade de criar adicionar objetos com tempo de vida pré-definidos- Possibilidade de excluir objetos manualmente- É possível utilizar o memcached como se fosse uma session- Quem utiliza: Facebook, Youtube, Flickr
Maneiras de implementar um caching engine eficaz e eficiente
Almir Neto - @[email protected]
Memcached<?php$id = (int) $_GET['id'];$cache_id = "noticia::$id";$memcache = new Memcache();$memcache->connect('localhost', 11211);if(!($noticia = $memcache->get($cache_id))) {$noticia = new Noticia($id);$memcache->set($cache_id,$noticia);}
Maneiras de implementar um caching engine eficaz e eficiente
Almir Neto - @[email protected]
Smarty
- Sistema de Template- Gera cache do template- Se algum template for alterado o Smarty recompila automaticamente- Permite definir um tempo de vida para o template cacheado- Permite limpar o cache manualmente- Cache dinâmico
Maneiras de implementar um caching engine eficaz e eficiente
Almir Neto - @[email protected]
Smarty<?phprequire 'smarty/Smarty.class.php';$id = (int) $_GET['id'];$smarty = new Smarty();$smarty->caching = 1;if(!$smarty->is_cached('noticia.tpl',$id)) {//Carrega do banco de dados}$smarty->display('noticia.tpl',$id);
Maneiras de implementar um caching engine eficaz e eficiente
Almir Neto - @[email protected]
Rasmus' trick• Conhecida como a Maneira Rasmus Lerdorf de implementar cache• Técnica criada por Stig Bakken• Passos:
– Altera-se a página de erro 404 para que esta chame um arquivo PHP.– O arquivo PHP gera uma página HTML com o nome que o usuário tentou acessar
Dessa forma, o primeiro usuário que acessar vai gerar os arquivos HTML, e os próximos vão acessar diretamente o arquivo gerado, sem a necessidade da execução do PHP.
Maneiras de implementar um caching engine eficaz e eficiente
Fluxo da execução
Almir Neto - @[email protected]
1ª execução
Maneiras de implementar um caching engine eficaz e eficiente
Almir [email protected]
Fluxo da execuçãoPróximas execuções
Maneiras de implementar um caching engine eficaz e eficiente
Almir [email protected]
Configurando o Apache
ErrorDocument 404 /gerarCache.php
Maneiras de implementar um caching engine eficaz e eficiente
Almir [email protected]
Show me the code!gerarCache.php
Maneiras de implementar um caching engine eficaz e eficiente
Almir [email protected]
Como limpar o cache?Limpar todo o cache através de um arquivo em background
Maneiras de implementar um caching engine eficaz e eficiente
Almir [email protected]
Como limpar o cache?Limpar um determinado arquivo
Maneiras de implementar um caching engine eficaz e eficiente
Bibliografia / Agradecimentos• Elton Minetto:
http://www.eltonminetto.net/docs/app_web_escalaveis_xxe.pdf • Smarty:
http://www.smarty.net • PHPSP:
http://phpsp.org.br/2008/06/30/smarty-e-caching/ • Memcached
http://www.danga.com/memcached/ • APC
http://www.php.net/apc• Felipe Ribeiro
http://imasters.uol.com.br/artigo/11191
Almir [email protected]
Top Related