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

StackOverflow https://stackoverflow.com/questions/4062

  •  08-06-2019
  •  | 
  •  

Pergunta

Atualmente conheço apenas duas maneiras de armazenar dados em cache (eu uso PHP, mas presumo que o mesmo se aplicará à maioria das linguagens).

  1. Salve o cache em um arquivo
  2. Salve o cache em um campo grande do banco de dados

Existem outras formas (talvez melhores) de armazenamento em cache ou é realmente simples assim?

Foi útil?

Solução

Talvez você queira explicitar com mais precisão o que deseja armazenar em cache.Você tem todas essas oportunidades de armazenar em cache:

  • Acessando o banco de dados onde você armazena os dados em cache primeiro ajustando corretamente seu RDBMS e depois usando uma camada para delegar a decisão de detectar múltiplas consultas para os mesmos dados (com AdoDB por exemplo.)
  • Extraindo cálculos de loops no código então você não calcula o mesmo valor várias vezes. Aqui está sua terceira maneira:armazenar resultados na sessão para o usuário.
  • Pré-compilando o código PHP com uma extensão como Cache APC.Dessa forma você não precisa compilar o mesmo código PHP para cada solicitação.
  • A página enviada ao usuário certificando-se de definir as tags META corretas (faça uma coisa boa para o mundo e não use ETL pelo menos absolutamente necessário);ou talvez tornar as páginas dinâmicas completamente estáticas (tendo um processo em lote que gera páginas .html);ou usando um cache proxy como Lula.
  • Pré-busca e com isso me refiro a todas as oportunidades que você tem para melhorar a experiência do usuário apenas fazendo coisas enquanto o usuário não olha em sua direção.Por exemplo, pré-carregar tags IMG no arquivo HTML, ajustar o RDBMS para pré-perfeição, pré-computar resultados armazenando cálculos complexos no banco de dados, etc.

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

Verifique também se você está fazendo suas consultas SQL e se está indexando suas tabelas.Em seguida, verifique seu código novamente para procurar oportunidades de aplicar a regra "leia muitas vezes, mas escreva apenas uma vez"

Use uma ferramenta simples como YLento para sugerir outras coisas simples para melhorar.Verifique seu código novamente em busca de oportunidades para colocar lógica no navegador (via JavaScript)

Outras dicas

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

Apoiar o memcached, faz bem as coisas simples e pode se tornar distributivo e todo aquele jazz se você precisar também

Se estiver usando Apache, você pode usar mod_rewrite para armazenar em cache estaticamente suas páginas da web.Digamos que você esteja usando PHP e tenha uma solicitação para "/somepage.php".No seu arquivo .htaccess você coloca 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 seu cache ficar vazio, a solicitação será tratada pelo seu script php normalmente, então agora é simplesmente uma questão de fazer com que o seu script php armazene o html resultante no cache.A maneira mais simples de fazer isso é usar outra regra htaccess para preceder e anexar alguns arquivos php a todas as suas solicitações php (isso pode ou não ser uma boa ideia, dependendo da sua aplicação):

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

Então você faria algo assim:

pré_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 começar a armazenar solicitações de string de consulta em cache também, mas deixarei isso como um exercício para o leitor :)

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