Não importa para armazenamento em cache se você usa views ou db_query (). O armazenamento em cache funciona sempre da mesma maneira, a forma como os dados são buscados quando o cache falha é totalmente sua.
- Crie um ID de cache para identificar sua entrada de cache. Pode ser uma sequência simples, codificada ou algo complexo com base em argumentos e assim por diante.
- Verifique se pode carregar do cache.
- Caso contrário, recrie os dados e coloque-os no cache com o tempo de expiração desejado.
Para ver alguns exemplos, você pode examinar as funções que usam cache_get () , por exemplo variable_initialize () .
Se sua função for chamada várias vezes, provavelmente você deseja combiná-la com um cache estático, veja por exemplo archiver_get_info () . E se a reconstrução dos dados for realmente lenta, você poderá impedir que isso ocorra várias vezes usando a estrutura de bloqueio, como o variable_initialize ().
Observe que o cache de uma única consulta só faz sentido se for lenta, porque cache_get () também é uma consulta db, a menos que você use um backend de cache alternativo como o Memcache.
E, por último, o Views já possui armazenamento em cache embutido e pode ser configurado em sua exibição. Portanto, isso também pode ser uma opção.
db_query()
, e ter que armazenar em cache o valor de$results->fetchAll()
e não$results
é a chave para realmente fazê-lo funcionar.Eu não acho que a camada de banco de dados tenha algum mecanismo de cache embutido (embora eu possa estar errado), mas você poderia fazer uso da API de cache padrão.
Este é apenas um exemplo básico que armazenará em cache os resultados de uma consulta para obter nós de um determinado tipo:
fonte
Além do mecanismo padrão cache_set / cache_get que o Drupal fornece, se você estiver usando o MySQL como seu banco de dados, poderá ativar o cache de consultas , que pode armazenar em cache os resultados das visualizações ou qualquer outra consulta de banco de dados de forma transparente. O mysqltuner pode ajudar a descobrir bons valores para o tamanho do cache.
Observe que, se você estiver gravando muito no banco de dados, o cache de consultas se tornará menos eficaz devido à maneira como a estratégia de invalidação de cache funciona (uma gravação em uma tabela invalida todas as entradas que SELECT FROM ou JOIN nessa tabela).
Também existe um mecanismo de cache para o PostgreSQL , mas não tenho experiência direta com ele.
fonte
Eu descobri recentemente o módulo Ações de cache . Com este módulo, você pode definir o cache da visualização como Cache acionado por regras e criar uma regra para invalidar o cache em visualizações e exibições específicas.
Por exemplo, o cache de uma exibição que lista nós de um tipo de conteúdo específico pode ser esvaziado quando um novo nó é criado para esse tipo de conteúdo.
fonte