Fonte de dados: Redis


1Apresentação

O Temma pode gerenciar bancos de dados não relacionais executados no servidor Redis.

Se você configurou corretamente os parâmetros de conexão ao banco de dados Redis, o Temma cria automaticamente um objeto do tipo \Temma\Datasources\Redis. Por convenção, vamos supor que você nomeou essa conexão ndb no arquivo etc/temma.php (veja a documentação de configuração).

A conexão fica então disponível no controlador da seguinte forma:

$ndb = $this->ndb;

Nos demais objetos gerenciados pelo componente de injeção de dependências, a conexão ao banco de dados é acessível da seguinte forma:

$ndb = $loader->dataSources->ndb;
$ndb = $loader->dataSources['ndb'];

2Configuração

No arquivo etc/temma.php (veja a documentação de configuração), você declara o DSN (Data Source Name) usado para se conectar ao servidor Redis.

O DSN de conexão a um servidor Redis é escrito como: redis://SERVIDOR[:PORT][/BASE]
O número de porta padrão é 6379.
O número da base é 0 (zero) por padrão.
Exemplo: redis://localhost

Se o servidor Redis estiver em execução na mesma máquina, é possível se conectar usando um socket Unix, evitando a latência de rede. Nesse caso, o DSN é: redis-sock://PATH[#BASE]
O caminho deve levar ao socket Unix (geralmente /var/run/redis.sock).
O número da base padrão é 0 (zero).
Exemplo: redis-sock:///var/run/redis.sock#2


3Chamadas unificadas

3.1Acesso tipo array

// verifica a existência do dado
if (isset($ndb['key1']))
    doSomething();

// lê dados (desserializados)
$data = $ndb['key1'];

// grava dados (serializados)
$ndb['key1'] = $value;

// apaga dado
unset($ndb['key1']);

// conta elementos
$cnt = count($ndb);

3.2Métodos gerais

// verifica a existência do dado
if ($ndb->isSet('user:1'))
    doSomething();

// apaga dado
$ndb->remove('user:1');

// apaga vários dados
$ndb->mRemove(['user:1', 'user:2', 'user:3']);

// apaga dados a partir de uma expressão regular
$ndb->clear('user:.*');

// apaga todos os dados
$ndb->flush();

3.3Gerenciamento de dados complexos serializados

// busca chaves que correspondem a uma expressão regular
$users = $ndb->search('user:.*');

// busca de chaves a partir de um prefixo, com recuperação dos dados (desserializados)
$users = $ndb->search('user:.*', true);

// busca paginada (10 resultados a partir do 20º)
$users = $ndb->search('user:.*', true, 20, 10);

// lê dados (desserializados)
$user = $ndb->get('user:1');
// lê dados com valor padrão
$color = $ndb->get('color', 'blue');
// lê dados, criando o dado se necessário
$user = $ndb->get("user:$userId", function() use ($userId) {
    return $this->dao->get($userId);
});

// lê vários dados (desserializados)
$users = $ndb->mGet(['user:1', 'user:2', 'user:3']);

// grava dados (serializados)
$ndb->set('user:1', $userData);
// grava dados (serializados) com validade de uma hora
$ndb->set('user:1', $userData, 3600);

// grava vários dados (serializados)
$ndb->mSet([
    'user:1' => $user1data,
    'user:2' => $user2data,
    'user:3' => $user3data,
]);
// grava vários dados, com validade de uma hora
$ndb->mSet([
    'user:1' => $user1data,
    'user:2' => $user2data,
], 3600);

3.4Gerenciamento de dados brutos

// lê dados (brutos)
$html = $ndb->read('page:home');
// lê dados com valor padrão
$html = $ndb->read('page:home',
                         '<html><body><h1>Homepage</h1><body><html>');
// lê dados, criando o dado se necessário
$html = $ndb->read('page:home', function() {
    return file_get_contents('/path/to/homepage.html');
});

// lê vários dados (brutos)
$pages = $ndb->mRead(['page:home', 'page:admin', 'page:products']);

// copia dado para um arquivo local
$ndb->copyFrom('page:home', '/path/to/newpage.html');
// copia dado para um arquivo local, com valor padrão
$ndb->copyFrom('page:home', '/path/to/newpage.html', $defaultHtml);
// copia dado para um arquivo local, criando o dado se necessário
$ndb->copyFrom('page:home', '/path/to/newpage.html', function() {
    return file_get_contents('/path/to/oldpage.html');
});
// copia dado para um arquivo local, criando o dado se necessário
// (com validade de uma hora)
$ndb->copyFrom('page:home', '/path/to/newpage.html', function() {
    return file_get_contents('/path/to/oldpage.html');
}, 3600);

// grava dado (bruto)
$ndb->write('color:blue', '#0000ff');
// grava dado (bruto) com validade de uma hora
$ndb->write('color:blue', '#0000ff', 3600);

// grava vários dados (brutos)
$ndb->mWrite([
    'color:blue'  => '#0000ff',
    'color:red'   => '#ff0000',
    'color:green' => '#00ff00',
]);
// grava vários dados com validade de uma hora
$ndb->mWrite([
    'color:blue'  => '#0000ff',
    'color:red'   => '#ff0000',
], 3600);

// grava dado (bruto) a partir de um arquivo local
$ndb->copyTo('page:home', '/path/to/homepage.html');
// grava dado a partir de um arquivo local, com validade de uma hora
$ndb->copyTo('page:home', '/path/to/homepage.html', 3600);

// grava vários dados (brutos) a partir de arquivos locais
$ndb->mCopyTo([
    'page:home'     => '/path/to/homepage.html',
    'page:admin'    => '/path/to/admin.html',
    'page:products' => '/path/to/products.html',
]);
// grava vários dados a partir de arquivos locais com validade de uma hora
$ndb->mCopyTo([
    'page:home'  => '/path/to/homepage.html',
    'page:admin' => '/path/to/admin.html',
], 3600);