Saída do cache de conteúdo Cache PEAR
A seguir, começaremos a explorar tecnologias de cache mais comumente usadas, que também é o foco deste artigo. Primeiro usamos o pacote cache no PEAR. PEAR pode armazenar conteúdo em arquivos, bancos de dados ou memória. Vejamos os arquivos como exemplo.
Aqui está um pequeno programa PHP que não usa cache:
pear_content_cache1.php
<?php
echo "Este é o conteúdo. <P>";
echo "A hora atual é" .
?>
O programa acima é muito simples, agora adicionamos cache a ele.
pera_content_cache2.php
<?php
require_once 'Cache/Output.php';
//Defina o diretório de cache, que deve ser gravável $cacheDir = './pear_cache';
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
//Se a variável nocache estiver vazia, use o conteúdo do cache //Se você deseja obter o conteúdo mais recente, atribua-o para a variável nocache if (empty($_REQUEST['nocache']))
{
// Cria um ID de cache exclusivo // Solicitação + informações de cookie $cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS) );
}
outro
{
//Se você deseja obter o conteúdo mais recente, o ID está vazio $cache_id = null;
}
//Verifica se o conteúdo do cache correspondente ao ID do cache está disponível if ($content = $cache->start($cache_id))
{
//O cache já existe, produza diretamente e finalize o script echo $content;
saída();
}
// O conteúdo não existe no cache, gere um novo conteúdo e grave-o no cache echo "Este é o conteúdo. <P>";
echo "A hora atual é" . date('MdY H:i:s A', time()) "<BR>"
// Grava o conteúdo no cache echo $cache->end();
?>
Atualize esses dois arquivos respectivamente e você descobrirá que a hora na linha "A hora atual é" em pear_content_cache1.php muda com a atualização, enquanto esta linha em pear_content_cache2.php não muda. Isso ocorre porque pear_content_cache2.php usa cache para armazenar o conteúdo solicitado pelo usuário em um arquivo estático. Quando o usuário solicita novamente, a saída é diretamente do arquivo, sem a necessidade de um programa para gerar o conteúdo dinamicamente.
Para pear_content_cache2.php, se o usuário quiser ler as informações mais recentes em vez das informações antigas no cache. Então você pode acessá-lo com http://…/pear_content_cache2.php?nocache=1 , o que desabilitará a função de cache. Atualize-o e veja se a hora mudará de acordo.
Para resumir o uso da classe de cache de conteúdo PEAR:
1. Ao incluir o pacote PEAR, certifique-se de definir o caminho correto.
2. Contém a classe de cache em Output.php
require_once 'Cache/Output.php'
; Defina o diretório de cache
$cacheDir = './pear_cache';
confirme se este diretório é gravável. Os dados do cache serão gravados em subdiretórios deste diretório.
4. Crie um objeto de cache de saída
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
O primeiro parâmetro indica que usamos um cache baseado no método "file", e o segundo parâmetro é um cache. cache Matriz associada a diretórios.
5. Gere um ID de cache exclusivo
$
cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS));
( ), fornecendo uma série de informações (URL, dados HTTP POST e cookie HTTP) para identificar exclusivamente esta solicitação e distingui-la de outras solicitações.
6. Adicione uma instrução de julgamento lógico para ver se os dados de cache correspondentes ao cacheID já existem. Se existir, obtenha os dados e finalize o script.
if ($content = $cache->start($cache_id))
{
eco $conteúdo;
saída();
}
7. Coloque o código que gera o conteúdo após a instrução lógica acima e finalize usando o objeto cache.
echo $cache->end();
function cache output PEAR cache
PEAR pode não apenas armazenar em cache o conteúdo de saída, mas também armazenar em cache o resultado da chamada de uma determinada função. Este é um recurso muito interessante. Se o seu programa utiliza uma determinada função com frequência e o resultado da chamada é o mesmo, sugiro que você experimente, principalmente se esta função for executada lentamente.
Em seguida, implementamos uma chamada em buffer para slowFunction(), uma função que é executada muito lentamente.
<?php
require_once 'Cache/Função.php';
$cacheDir = './pear_cache/';
$cache = new Cache_Function('arquivo',array('cache_dir' => $cacheDir));
$arr = array('maçã', 'pêra', 'melancia');
$cache->call('slowFunction', $arr);
echo '<BR>';
$arr = array('maçã', 'pêra', 'melancia');
funçãolenta($arr);
funçãofunçãolenta($arr = null)
{
echo "Uma função que executa muito lentamente: ( <br>";
echo "A hora atual é" .
foreach ($arr como $fruta)
{
echo "Eu comi uma $fruta <br>";
}
)
?>
A seguir está o resultado da execução do script do exemplo:
uma função que é executada muito lentamente
A hora atual é 28 de julho de 2004 17:15:57 PM.
Comi uma maçã comi uma pêra comi uma melancia
Uma função que executa muito lentamente :(
A hora atual é 28 de julho de 2004 17:17:55 PM
Comi uma maçã, comi uma pêra, comi uma melancia
No código, a classe Cache/Function.php é usada para executar a função de buffer de função. A variável $cache é um objeto Cache_Function que usa cache de função baseado em arquivo e é armazenado no diretório $cacheDir. Para armazenar em cache uma chamada de função, o método call() do objeto Cache_Function $cache deve ser usado assim: $cache->call('slowFunction', $arr)
; é um array $arr. Esta função é armazenada em cache em um arquivo no diretório $cacheDir. Quaisquer chamadas subsequentes para esta função terão o resultado da execução da função retornado por $cache->call(). O cache e o uso de funções são muito semelhantes ao cache de conteúdo, então não entrarei em detalhes. Verifique o manual do PEAR para obter detalhes.