Olá, tudo bem?!

Em nossas aplicações com frequência trabalhamos com informações/dados que não sofrem alteração com muita frequência, porem ela é carregada e processada o tempo todo em que o recurso é requisitado, acarretando em perda de performance e processamento desnecessário (maior custo para manter o sistema $$$) e uma experiência não muito agradável para o usuário.

Umas das possíveis formas de resolver esse nosso problema é armazenando essa informações em cache, para isso vamos utilizar o componente Zend-Cache, componente robusto e que nos fornece um leque de possibilidades muito bacana para nossa caixa de ferramenta.

Para demonstrar seu potencial vamos implementar um cache simples para que possamos vê-lo em prática.

Crie a seguinte estrutura de diretórios e arquivo:

  • exemplo-cache-zend
    • cache
    • index.php

Instalação do componente

Para instalar o Zend-Cache, basta acessar a raiz do projeto que criamos anteriormente e executar o seguinte comando:

1
composer require zendframework/zend-cache

Após a instalação do pacote, podemos dar início a implementação do recurso.

Implementação do recurso de cache com Filesystem

Abra o arquivo index.php e importe o autoloader do composer, para que ele nos auxilie no consumo do componente Zend-Cache.

1
2
3
<?php
// Importação do autoloader do composer
require_once __DIR__.'/vendor/autoload.php';

Devemos agora importar o componente Zend-Cache\StorageFactory.

1
2
3
4
5
<?php
// Importação do autoloader do composer
require_once __DIR__.'/vendor/autoload.php';

use Zend\Cache\StorageFactory;

Com as devidas configurações implementadas, devemos agora criar nosso objeto que será responsável pelo gerenciamento do cache.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// Criaçao via factory:
$cache = StorageFactory::factory([
    'adapter' => [
        'name'      => 'filesystem',// tipo de cache.
        'options'   => [
            'ttl'       => 15, // tempo que a informação ficará mantida no cache
            'cache_dir' => './cache' // diretório onde será armazenado o arquivo de cache
        ],
    ],
]);

Vamos detalhar um pouco nosso código:

  • Adapter
    • name
      • Aqui especificamos qual tipo de cache desejamos utilizar, em nosso exemplo estamos utilizando o filesystem, onde irá ser criado um arquivo que irá armazenar nossa informação.
      • Existem também as opções:
        • Apc.
        • Dba.
        • Memcached.
        • Redis.
  • Options
    • ttl
      • Opção é definido em segundos o tempo que a informação será mantida em cache.
    • cache_dir
      • Opção que informa o local onde será criado os arquivos de cache.

O componente de Zend-Cache dispõem de muitas outras configurações, com isso recomendo que caso queira explorar mais a fundo o componente acesse sua documentação.

Vamos agora inserir nossa informação no cache, para isso devemos implementar a seguinte estrutura:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$dadosNoCache = $cache->getItem('dados');// solicita o cache
var_dump($cache->getItem('dados'));// exibe o que foi coletado
// caso não tenha informação no cache
if(is_null($dadosNoCache)){
    $cache->addItems([
        'dados' => 'meus dados: '.date('Y-m-d H:i:s'),// dados que desejamos inserir no cache
    ]);
}

// Exibe os dados mantidos no cache.
var_dump($cache->getItem('dados'));

No código acima, basicamente requisitamos ao componente de cache para que o mesmo busque os dados armazenados, caso não tenha nenhuma informação armazenada será incluso os dados e exibido seu retorno para que possamos acompanhar o momento da inclusão das informações. A partir da inclusão dos dados no cache o componente irá criar um diretório e um arquivo “exemplo-cache-zend/cache/zfcache-c5/zfcache-dados.data“.

Para que possamos analisar o resultado abra o terminal na raiz do projeto e execute o seguinte comando:

1
php index.php

Após executar o código, será retornado uma mensagem similar ao exibido abaixo:

1
2
NULL
string(31) "meus dados: 2017-05-19 19:15:49"

O NULL é referente a não termos nada ainda armazenado em cache e a string representa os dados recém armazenados, para validar nosso código basta executar o código novamente e analisar seu retorno, lembrando que as informações ficarão armazenadas por 15 segundos.

1
2
string(31) "meus dados: 2017-05-19 19:15:49"
string(31) "meus dados: 2017-05-19 19:15:49"

Como podemos observar as duas strings são idênticas, pois foram coletadas do nosso cache que acabamos de implementar, para que seja exibido novas informações devemos aguardar os 15 segundos que configuramospara que todo o processo de inserção seja executado novamente.

A implementação foi simples e rápida,  o cache com filesystem permite apenas armazenarmos string, porem deixo uma dica, caso queira armazenar um array basta convertê-lo para json armazená-lo em cache e assim que você retornar os dados converta-o novamente para array. 😉

Espero que tenham apreciado e que seja útil para você em seu dia a dia.

Caso tenham alguma dica, sugestão, crítica ou elogios recomendo que deixem nos comentários para que assim possamos gerar mais conteúdo e aprender cada vez mais.

Um grande abraço e até mais! 🙂