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);