SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
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
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
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
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
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
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
- 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
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
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
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
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
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
Maneiras de implementar um caching engine eficaz e eficiente



  Fluxo da execução
               1ª execução




               Almir Neto - @almirneto
                almirneto@gmail.com
Maneiras de implementar um caching engine eficaz e eficiente



  Fluxo da execução
          Próximas execuções




                       Almir Neto
                 almirneto@gmail.com
Maneiras de implementar um caching engine eficaz e eficiente



Configurando o Apache


      ErrorDocument 404 /gerarCache.php




                        Almir Neto
                  almirneto@gmail.com
Maneiras de implementar um caching engine eficaz e eficiente



           Show me the code!
gerarCache.php




                                Almir Neto
                          almirneto@gmail.com
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
Maneiras de implementar um caching engine eficaz e eficiente



Como limpar o cache?
     Limpar um determinado arquivo




                       Almir Neto
                 almirneto@gmail.com
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
Maneiras de implementar um caching engine eficaz e eficiente




                   Fim



                       Almir Neto
                 almirneto@gmail.com

Weitere ähnliche Inhalte

Andere mochten auch

Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginasMikeNandes
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
CakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroCakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroJuan Basso
 
Glosario de qbasic liliana
Glosario de qbasic lilianaGlosario de qbasic liliana
Glosario de qbasic lilianakhjhjhjh
 
Conceitos básicos de AEDS
Conceitos básicos de AEDSConceitos básicos de AEDS
Conceitos básicos de AEDSPablo Silva
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoIvan Rosolen
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrênciaPablo Silva
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Trabalho cobol e basic
Trabalho cobol e basicTrabalho cobol e basic
Trabalho cobol e basicDaniel Carrara
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmosPablo Silva
 
LIVROPROPRIETÁRIO-ALGORITMOS
LIVROPROPRIETÁRIO-ALGORITMOSLIVROPROPRIETÁRIO-ALGORITMOS
LIVROPROPRIETÁRIO-ALGORITMOSOs Fantasmas !
 
Algoritmos em c #1
Algoritmos em c #1Algoritmos em c #1
Algoritmos em c #1Stark2009
 
Desenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosDesenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosLucas Vegi
 

Andere mochten auch (19)

Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
CakePHP com sotaque brasileiro
CakePHP com sotaque brasileiroCakePHP com sotaque brasileiro
CakePHP com sotaque brasileiro
 
Glosario de qbasic liliana
Glosario de qbasic lilianaGlosario de qbasic liliana
Glosario de qbasic liliana
 
Conceitos básicos de AEDS
Conceitos básicos de AEDSConceitos básicos de AEDS
Conceitos básicos de AEDS
 
Linguagem C - Uniões
Linguagem C - UniõesLinguagem C - Uniões
Linguagem C - Uniões
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Trabalho cobol e basic
Trabalho cobol e basicTrabalho cobol e basic
Trabalho cobol e basic
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Pilha dinâmica
Pilha dinâmicaPilha dinâmica
Pilha dinâmica
 
LIVROPROPRIETÁRIO-ALGORITMOS
LIVROPROPRIETÁRIO-ALGORITMOSLIVROPROPRIETÁRIO-ALGORITMOS
LIVROPROPRIETÁRIO-ALGORITMOS
 
Algoritmos em c #1
Algoritmos em c #1Algoritmos em c #1
Algoritmos em c #1
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Desenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosDesenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetos
 

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