Symfony2: Gerenciando você mesmo o cache
Agência web » Notícias digitais » Symfony2: Gerenciando você mesmo o cache

Symfony2: Gerenciando você mesmo o cache

O cache está presente em todos os lugares da computação e, felizmente, em outros lugares. Sem ele, os tempos de processamento seriam muito mais longos! Em uma época em que todos os frameworks dignos desse nome usam um sistema de cache, por que precisaríamos gerenciar o cache nós mesmos?

Cache no Symfony2

No Symfony2, você pode facilmente configurar um sistema de cache. Além disso, se quiséssemos ser exatos, parece que o Symfony tem seu próprio sistema de cache (app/cache/env/), e que também podemos conectar um sistema de cache no nível do servidor (Apache, IIS, …). Esse cache é totalmente gerenciável e a memória é volátil. Assim que o servidor for reiniciado, o cache do servidor será excluído.

Sistemas de cache

Quais sistemas de cache existem? Da memória, três programas surgem regularmente.

  • XCache
  • Memcached
  • APC
    APC é agora obsoleta desde o PHP 5.4, então não recomendo tentar conectá-lo.

No meu caso, usarei o XCache. Você também pode encontrar meu post sobre como instalar o XCache.

Por que gerenciar seu cache você mesmo

Eu posso ver alguns comentários chegando e perguntando “por quê? ". Enquanto o Doctrine permite que você use facilmente o cache por meio de seu método useResultCache(use, delay, id). Minha resposta é simples: fazer tratamentos gratuitos.

Um pequeno exemplo para lhe dar algumas ideias. Digamos que estou armazenando em cache um item de um banco de dados. Se eu modificar esta entidade, o cache não será atualizado até que os dados tenham expirado. Com um gerenciamento de cache personalizado, poderei, mesmo antes do cache atingir o tempo alocado, redefinir os novos dados e sobrescrever os antigos. Isso requer gerenciamento significativo, mas os ganhos de desempenho podem ser substanciais.

Symfony2 e como gerenciar seu próprio cache

Eu ofereço a você este pequeno código de memorando para gerenciar facilmente. No nosso caso, a função deste Gist visa retornar o resultado de uma consulta SQL.

Protótipo: função execute ($sql_query, $id = null, $delay = 3600);
Configurações:

  1. _sqlpergunta corresponde à consulta SQL que você deseja executar.
  2. id é o identificador vinculado aos dados armazenados em cache. Para um ID x, você terá um conteúdo x.
  3. atraso é o tempo máximo que você der cache será válido. Por padrão, 3600 segundos. Isso significa que, depois de armazenar seus dados em cache, eles estarão disponíveis por 3600 segundos.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    função executar ($sql_query, $id = null, $delay = 3600)
    {
    // Declaramos uma instância de cache
    $cacheDriver = novo DoctrineCommonCacheXcacheCache();
    $resultados = nulo;
    //Se um ID foi inserido e o sistema de cache contém dados para um ID "x"
    if ($id!= nulo && $cacheDriver->contém($id)) {
    //Em seguida, pegamos os dados em cache para um ID "x"
    $resultados = $cacheDriver->fetch($id);
    }
    //Se não houver dados, caso os dados em cache sejam iguais a nulo
    if ($resultados == nulo) {
    //Recuperamos os dados
    $resultados = $ This->container->get("doutrina")->getManager()->getRepository("NamespaceNameBundle:Entity")->encontrarTodos();
    //Se tivermos um ID de cache
    if ($id!= nulo) {
    //Salvamos os dados para um ID x e para um atraso y
    $cacheDriver->save($id, $resultados, intval($atraso));
    }
    }
    //Retornamos os resultados limitando requisições futuras
    retorno $resultados;
    }

Bem, espero que este memorando o ajude. Até breve e obrigado por ler este post!

★ ★ ★ ★ ★