Fazer Cache de Dados de Banco de Dados


1Introdução

Este mini tutorial tem como objetivo fazer cache de dados obtidos de um banco de dados.

Vamos supor que você já tenha um site baseado no Temma, com um controlador que exibe dados de um banco de dados relacional.


2Configuração

No arquivo de configuração, vamos adicionar uma fonte de dados correspondente a um servidor Memcache.

Edite o arquivo etc/temma.php:

<?php

return [
    'application' => [
        'dataSources' => [
            'db'    => 'mysql://user:pwd@localhost/base',
            'cache' => 'memcache://localhost',
        ],
    ],
];
  • Linha 6: define a fonte de dados conectada a um banco de dados MySQL.
  • Linha 7: define a fonte de dados conectada a um servidor Memcache.

3Controlador

Vamos imaginar um controlador bem simples que exibe uma lista de usuários.
Aqui está um exemplo de implementação:

<?php

/** Controlador de usuários. */
class User extends \Temma\Web\Controller {
    /** Ação que exibe a lista de usuários. */
    public function list() {
        // busca a lista no banco de dados
        $users = $this->_loader->UserDao->search();
        // armazena a lista em uma variável de template
        $this['users'] = $users;
    }
}

A cada acesso à ação list, uma consulta é executada no banco de dados por meio do objeto UserDao.

Agora vamos ver como adicionar cache para evitar consultar o banco de dados a cada vez:

<?php

/** Controlador de usuários. */
class User extends \Temma\Web\Controller {
    /** Ação que exibe a lista de usuários. */
    public function list() {
        // define a chave de cache
        $cacheVarName = 'user:list';
        // busca a lista no cache
        $users = $this->cache->get($cacheVarName, function() {
            // este código é executado se o valor não estiver em cache
            // busca a lista no banco de dados
            return $this->_loader->UserDao->search();
        });
        // armazena a lista em uma variável de template
        $this['users'] = $users;
    }
}

Todas as informações relacionadas estão disponíveis na documentação do cache.