Page Caching com dependências de expiração

otavio publicou em 22/10, 02:45 hs , e editou pela última vez há mais de 10 anos atrás.

Criando page caching com dependências ao invés de controle de tempo apenas

Além da expiração por tempo, uma forma útil é expirar por dependência. A dependência pode ser por alteração de um arquivo (no Rails se usava muito um touch em tmp/restart.txt para recarregar uma aplicação em produção) ou uma consulta que retornava um valor (ver mais aqui). Todas são interessantes e úteis em algum momento.

A mais usual, para mim, é sempre a CDbCacheDependency, como o exemplo abaixo:

array(
'COutputCache + index',
'duration' => 7200,
'varyByParam' => array('id'),
'dependency' => array(
 'class' => 'CDbCacheDependency',
 'sql' => 'select max(id) from clientes',
),
),

Dessa forma, caso um novo cliente seja incluído, a página irá expirar, mesmo antes do tempo estipulado.

Usando o CChainedCacheDependency

O Yii também pode usar a dependência de forma múltipla. Nesse caso, mais de um atributo permite expirar a página. Esse é um caso interessante para dashboards, como no exemplo abaixo:

array(
'COutputCache + index',
'duration' => 7200,
'varyByParam' => array('id'),
'dependency' => array(
'class' => 'CChainedCacheDependency',
'dependencies' => array(
   array(
     'class' => 'CDbCacheDependency',
     'sql' => 'select max(id) from vendas',
   ),
   array(
     'class' => 'CDbCacheDependency',
     'sql' => 'select MAX(id) from clientes',
   ),
  ),
 ),
),
if(typeof jQuery == 'undefined'){ document.write("