Maneiras de implementar um caching engine eficaz e eficiente

20
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

description

Softwares que tem milhares de acessos simultâneos geralmente não conseguem sobreviver sem um bom sistema de cache. E há várias soluções eficazes com esse objetivo, desde bibliotecas como o Smarty até soluções em que não é necessário utilizar nenhuma biblioteca, como a maneira Rasmus Lerdorf de implementar cache utilizando a página de erro 404.

Transcript of Maneiras de implementar um caching engine eficaz e eficiente

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]

Maneiras de implementar um caching engine eficaz e eficiente

Fim

Almir [email protected]