Que métodos de armazenamento em cache, além de arquivo ou banco de dados, estão disponíveis?

votos
10

Atualmente eu sei de apenas duas maneiras para armazenar dados (eu uso PHP, mas eu supor que o mesmo se aplica à maioria das línguas).

  1. Salvar o cache para um arquivo
  2. Salvar o cache para um grande campo DB

Existem outras (talvez melhor) formas de cache ou é realmente apenas este simples?

Publicado 06/08/2008 em 23:21
fonte usuário
Em outras línguas...                            


4 respostas

votos
2

Talvez você quer explícita, mais precisamente o que você deseja armazenar em cache. Você tem todas essas oportunidades para armazenar em cache:

  • Acessando a Base de Dados onde o cache de dados primeiro ajuste corretamente o seu RDBMS, em seguida, usando uma camada de delegar a decisão de detectar várias consultas para os mesmos dados (com adodb por exemplo.)
  • Extraindo cálculos de laços no código para que você não calcular o mesmo valor várias vezes. Aqui Sua terceira via: resultados armazenando na sessão para o usuário.
  • Pré-compilação do código PHP com uma extensão como APC Cache . Desta forma, você não tem que compilar o mesmo código PHP para cada pedido.
  • A página enviada para o usuário ter certeza que você está definindo as tags META direita (fazer uma coisa boa para o mundo e não use ETL pelo menos absolutamente necessário); ou talvez fazer páginas dinâmicas completamente estáticos (com um processo em lotes que gera páginas .html); ou usando um proxy cache como Squid .
  • Prefetching e por isso eu me refiro todos aqueles oportunidades que você tem para melhorar a experiência do usuário apenas fazendo as coisas enquanto o usuário não procurar o seu caminho. Por exemplo, o pré-carregamento IMG tags no arquivo HTML, tunning do RDBMS para prefectching, precomputing resultados armazenar cálculos complexos no banco de dados, etc.

Da minha experiência, eu apostaria que o seu código pode ser melhorado muito antes de começarmos a falar sobre coisas de cache. Considere, por exemplo, como bem estruturado é a navegação do seu site e quão bem você controlar a experiência do usuário. Em seguida, verifique seu código com uma ferramenta como o XDebug .

Verifique também o quão bem você está fazendo suas consultas SQL e quão bem você está indexando suas tabelas. Em seguida, verifique seu código novamente para procurar oportunidades para aplicar a regra "dizia muitas vezes, mas escrever apenas uma vez"

Use uma ferramenta simples como o YSlow para sugerir outras coisas simples para melhorar. Verifique se o seu código novamente à procura de oportunidades para colocar a lógica no navegador (via JavaScript)

Respondeu 07/08/2008 em 01:46
fonte usuário

votos
1

Você também pode armazenar em cache na memória que é muito mais eficiente. Tente memcached .

Respondeu 06/08/2008 em 23:23
fonte usuário

votos
0

Se você estiver usando Apache, você pode usar mod_rewrite para armazenar em cache estaticamente suas páginas web. Vamos dizer que você está usando PHP, e você tem um pedido de "/somepage.php". Em seu arquivo .htaccess você colocar o seguinte:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Se o cache transforma-se vazio, o pedido é processado pelo seu script php, como de costume, então agora é simplesmente uma questão de fazer o seu script php armazenar o html resultando na cache. A maneira mais simples de fazer isso é usando outra regra htaccess para preceder final anexar um par de arquivos PHP para todos os seus pedidos PHP (este pode ou não ser uma boa idéia, dependendo do aplicativo):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Em seguida, você faria algo assim:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

Com algumas expressões regulares adicionais no arquivo .htaccess provavelmente poderíamos iniciar cache pedidos cadeia de consulta, bem como, mas vou deixar isso como um exercício para o leitor :)

Respondeu 15/09/2008 em 22:28
fonte usuário

votos
0

Destacando memcached, faz as coisas simples bem e pode ir distributiva e jazz se você precisar dele também

Respondeu 07/08/2008 em 01:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more