Ao incluir o mesmo element com cache mais de uma vez na mesma página, caso você coloque o array $params com as chaves na mesma ordem, mesmo que com diferentes valores , o CakePHP irá sobrescrever o arquivo do cache, pois estas chaves são utilizadas para definir o nome do arquivo de cache. Veja a seguir:
echo $this->element('page',array('id' => 1, 'cache'=>'+1 hour'));
echo $this->element('page',array('id' => 2, 'cache'=>'+1 hour'));
Note que mesmo o valor do parametro id sendo diferente para cada chamada, o nome de arquivo gerado será o mesmo para os dois elements, algo como:
/app/tmp/cache/views/element_id_cache_<plugin><element>
A solução para o problema é definir a chave cache do array $params como um array, em vez de simplesmente definir a expiração do cache, definindo as chaves time e key, da seguinte maneira:
echo $this->element('page',array(
'id' => 1,
'cache'=> array(
'time' => '+1 hour',
'key' => 'nomeUnico1'
)));
echo $this->element('page',array(
'id' => 2,
'cache'=> array(
'time' => '+1 hour',
'key' => 'nomeUnico2'
)));
Definindo $params['cache']‘['key'] com um nome único, você terá nomes de arquivos de cache únicos:
/app/tmp/cache/views/element_nomeUnico1_<plugin><element>
/app/tmp/cache/views/element_nomeUnico2_<plugin><element>
Isto também poder ser útil quando é necessário gerar cache por usuário ou algo semelhante.
Mais informações em: http://book.cakephp.org/view/561/Caching-Elements e http://api.cakephp.org/view_source/view/#line-298