Invalidação de arquivos em cache inteligente
-
27-09-2019 - |
Pergunta
Eu gostaria de ir um pouco mais fundo no cache inteligente, então tenho algumas perguntas simples ...
Para manipular a invalidação do cache, quero saber em que diretório Smarty está armazenando seu cache. Por exemplo, todas as páginas em cache relacionadas a
user_id=123
Eu quero armazenar emcache/users/123/
. Ondecache
é o smarty cache dir. Como posso dizer a Smarty para armazenar o cache relacionado auser_id=123
nocache/users/123/
? O Smarty Store Store também será o cache de sub-timplados neste diretório?Existem recomendações sobre a limpeza do cache neste diretório? Eu acho que simplesmente remover arquivos deste diretório pode causar alguns erros se alguns visitantes estiverem visitando essas páginas (o erro pode ocorrer quando Smarty verá que o cache do modelo é encontrado, mas o cache do subdélogo não foi encontrado porque já foi removido, por exemplo).
Quaisquer recomendações e conselhos são apreciados.
Obrigada.
Solução
Dê uma olhada nos documentos Smarty: o "Grupos de cache"Seção. Faz exatamente isso.
Outras dicas
Você deve NÃO Limpar o cache manualmente. Use clear_cache () e clear_compiled_tpl () para isso. Você pode limpar todo o cache e também fazer uma limpeza seletiva com eles.
O uso pode mudar o cachedir Smarty, dependendo de onde você deseja (você pode verificar isso com algumas segundas se as Estaturas)
// Create smarty object
$smarty = new Smarty();
// Change smarty-dir is like this:
if (isset($_GET['userId'])) {
$smarty->compile_dir = '/path/to/dir/' . $_GET['userId'];
} else {
$smarty->compile_dir = '/path/to/dir/default';
}
O ponto dois é um pouco mais difícil, você precisa encontrar todos os mapes e atribuir o novo Dir compilador e, em seguida, executar o seguinte comando:
$smarty->clear_cache();
Mas, como você disse, é possível que o arquivo seja solicitado enquanto houver uma remoção. :-(
Mas não é recomendável usar diferentes pastas de cache, o Smarty não cache a saída, apenas o arquivo php compilado.