Pergunta

Qual é a melhor maneira de implementar um cache para um site PHP?Obviamente, há algumas coisas que não devem ser armazenadas em cache (por exemplo, consultas de pesquisa), mas quero encontrar uma boa solução que garanta que eu evite o 'efeito digg'.

Eu sei que existe o WP-Cache para WordPress, mas estou escrevendo uma solução personalizada que não é construída no WP.Estou interessado em escrever meu próprio cache (se for simples o suficiente) ou você pode me indicar uma estrutura leve e agradável.Eu não conheço muito o Apache, então se fosse um framework PHP, seria mais adequado.

Obrigado.

Foi útil?

Solução

Se um cache proxy estiver fora de questão e você estiver servindo arquivos HTML completos, obterá o melhor desempenho ignorando completamente o PHP.Estude como Super Cache WP funciona.

As páginas não armazenadas em cache são copiadas para uma pasta de cache com estrutura de URL semelhante à do seu site.Em solicitações posteriores, mod_rewrite observa a existência do arquivo em cache e o exibe.outras diretivas RewriteCond são usadas para garantir que comentaristas/usuários logados vejam solicitações PHP ao vivo, mas a maioria dos visitantes será atendida diretamente pelo Apache.

Outras dicas

Você pode usar buffer de saída para salvar seletivamente partes de sua saída (aquelas que você deseja armazenar em cache) e exibi-las para o próximo usuário se não tiver demorado o suficiente.Dessa forma, você ainda renderiza outras partes da página dinamicamente (por exemplo, caixas personalizáveis, informações pessoais).

A melhor maneira de fazer isso é usar um cache de proxy (Squid, Varnish) e servir cabeçalhos Cache-Control/Expires apropriados, junto com ETags :ver Tutorial de cache de Mark Nottingham para obter uma descrição completa de como os caches funcionam e como você pode obter o máximo desempenho de um proxy de cache.

Confira também memcached, e tente armazenar em cache suas consultas de banco de dados (ou melhor ainda, fragmentos de página pré-renderizados) lá.

eu recomendaria Memcached ou APC.Ambas são soluções de cache na memória com APIs extremamente simples e muitas bibliotecas.

O problema com esses 2 é que você precisa instalá-los em seu servidor web ou em outro servidor, se for Memcached.

APC

Prós:
  • Simples
  • Rápido
  • Acelera a execução do PHP também
Contras
  • Não funciona para sistemas distribuídos, cada máquina armazena seu cache localmente

Memcached

Prós:
  • Rápido (mais ou menos)
  • Pode ser instalado em um servidor separado para uso de todos os servidores web
  • Altamente testado, desenvolvido no LiveJournal
  • Usado por todos os grandes (Facebook, Yahoo, Mozilla)

    Contras:
  • Mais lento que APC

  • Possível latência de rede
  • Um pouco mais de configuração

Eu não recomendaria escrever o seu próprio, há muitos por aí.Você poderia optar por um cache baseado em disco se não conseguir instalar software em seu servidor web, mas há possíveis problemas de corrida para resolver.Uma solicitação pode estar gravando no arquivo enquanto outra está lendo.

Na verdade, você pode armazenar consultas de pesquisa em cache, mesmo que por alguns segundos a um minuto.A menos que seu banco de dados esteja sendo atualizado mais do que algumas vezes por segundo, algum atraso seria aceitável.

O mecanismo de modelo PHP Smarty (http://www.smarty.net) inclui um sistema de cache bastante avançado.

Você pode encontrar detalhes na seção de cache do manual do Smarty: http://www.smarty.net/manual/en/caching.php

Você parece estar procurando uma estrutura de cache PHP.Eu recomendo o sistema de templates TinyButStrong que vem com um plugin CacheSystem muito bom.É simples, leve, personalizável (você pode armazenar em cache qualquer parte do arquivo html que desejar), muito poderoso ^^

Cache simples de páginas ou partes de páginas - a classe Pear::CacheLite.Também uso APC e memcache para coisas diferentes, mas as outras respostas que vi até agora são mais para sistemas mais completos e complexos.Se você só precisa economizar algum esforço para reconstruir uma parte de uma página - Cache_lite com um armazenamento baseado em arquivo é totalmente suficiente e muito simples de implementar.

Projeto Gazela (um site de torrent de código aberto) fornece um guia passo a passo sobre como configurar o Memcached no site, que você pode usar facilmente em qualquer outro site que queira configurar e que lide com muito tráfego.

Pegue a fonte e leia a documentação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top