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.
Maneiras de implementar um caching engine eficaz e eficiente
1. Maneiras de implementar um caching
engine eficaz e eficiente
Almir Neto – almirneto@gmail.com
PHP Conference Brazil 2009
http://www.phpconf.com.br
Osasco, 27 de Novembro de 2009
2. Maneiras de implementar um caching
engine eficaz e eficiente
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
3. Maneiras de implementar um caching engine eficaz e eficiente
O que é cache?
Cache é um dispositivo de acesso rápido,
que tem como objetivo aumentar a
performance de aplicações
Almir Neto - @almirneto
almirneto@gmail.com
4. 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 - @almirneto
almirneto@gmail.com
5. Maneiras de implementar um caching engine eficaz e eficiente
Tipos de Cache
• 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
Almir Neto - @almirneto
almirneto@gmail.com
6. Maneiras de implementar um caching engine eficaz e eficiente
Como implementar Cache?
• APC
• Memcached
• Smarty
• Maneira Rasmus Lerdorf de implementar
Cache
7. Maneiras de implementar um caching engine eficaz e eficiente
APC - Alternative PHP Cache
- 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ções
Exemplo: Tabelas de apoio, como UF, Cidade, CEP, etc
- Simples utilização
Almir Neto - @almirneto
almirneto@gmail.com
8. Maneiras de implementar um caching engine eficaz e eficiente
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
Almir Neto - @almirneto
almirneto@gmail.com
9. Maneiras de implementar um caching engine eficaz e eficiente
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);
}
Almir Neto - @almirneto
almirneto@gmail.com
10. Maneiras de implementar um caching engine eficaz e eficiente
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
Almir Neto - @almirneto
almirneto@gmail.com
11. Maneiras de implementar um caching engine eficaz e eficiente
Smarty
<?php
require '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);
Almir Neto - @almirneto
almirneto@gmail.com
12. Maneiras de implementar um caching engine eficaz e eficiente
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.
Almir Neto - @almirneto
almirneto@gmail.com
13. Maneiras de implementar um caching engine eficaz e eficiente
Fluxo da execução
1ª execução
Almir Neto - @almirneto
almirneto@gmail.com
14. Maneiras de implementar um caching engine eficaz e eficiente
Fluxo da execução
Próximas execuções
Almir Neto
almirneto@gmail.com
15. Maneiras de implementar um caching engine eficaz e eficiente
Configurando o Apache
ErrorDocument 404 /gerarCache.php
Almir Neto
almirneto@gmail.com
16. Maneiras de implementar um caching engine eficaz e eficiente
Show me the code!
gerarCache.php
Almir Neto
almirneto@gmail.com
17. Maneiras de implementar um caching engine eficaz e eficiente
Como limpar o cache?
Limpar todo o cache através de um arquivo em background
Almir Neto
almirneto@gmail.com
18. Maneiras de implementar um caching engine eficaz e eficiente
Como limpar o cache?
Limpar um determinado arquivo
Almir Neto
almirneto@gmail.com
19. 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 Neto
almirneto@gmail.com
20. Maneiras de implementar um caching engine eficaz e eficiente
Fim
Almir Neto
almirneto@gmail.com