Usando o APC para cachear variáveis no PHP

Sempre associei o APC (Alternative PHP Cache) ao cache de opcode no PHP, e somente a isso. Acredito que essa ligação seja natural para muitas pessoas, mas o APC pode ir além disso, cacheando qualquer variável dentro do PHP. Para isso existem algumas funções na extensão: apc_add, apc_fetch, apc_delete etc.

Para um experimento básico é possível usar apenas as funções apc_add e apc_fetch, seguindo o padrão de design lazy loading:

class City
{
    private $state;
    public function getState()
    {
        $cacheKey = 'state';
        if (false === ($state = apc_fetch($cacheKey))) {
            $state = ... // Buscar o estado de algum lugar, talvez do BD.
            apc_add($cacheKey, $state, 3600);
        }
        return $state;
    }
}

A primeira vez que a função getState é chamada, ela carrega o estado e armazena no cache, nas próximas chamdas a variável armazenada no cache será usada, evitando o acesso ao banco de dados. Passada uma hora (3.600 segundos) a variável é removida automaticamente do cache e na chamada seguinte ao método, o banco será consultado novamente. O tempo de vida (TTL) do cache pode ser alterado conforme as características da aplicação e do contéudo a ser cacheado.

Sobre as chaves

A chave usada para armazenar a variável no APC é global e compartilhada entre todas as aplicações em um mesmo ambiente. Isso pode ser interessante, porque o cache é compartilhado e, além da questão de otimização, pode ser um caminho para soluções que envolvem a troca de informações entre requisições ou programas distintos, mas também pode gerar bugs inesperados e difíceis de identificar se diferentes scripts PHP usarem a mesma chave para diferentes propósitos. Assim é sempre muito importante criar chaves com nomes distintos e exclusivos.