Fuente de datos: Redis


1Presentación

Temma puede gestionar bases de datos no relacionales que se ejecutan en el servidor Redis.

Si has configurado correctamente los parámetros de conexión a la base de datos Redis, Temma crea automáticamente un objeto de tipo \Temma\Datasources\Redis. Por convención, supondremos que has llamado a esta conexión ndb en el archivo etc/temma.php (consulta la documentación de configuración).

La conexión está entonces disponible en el controlador escribiendo:

$ndb = $this->ndb;

En los demás objetos gestionados por el componente de inyección de dependencias, la conexión a la base de datos es accesible escribiendo:

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

2Configuración

En el archivo etc/temma.php (consulta la documentación de configuración), declaras el DSN (Data Source Name) usado para conectarte al servidor Redis.

El DSN usado para conectarse a un servidor Redis se escribe como: redis://SERVER[:PORT][/BASE]
El número de puerto por defecto es 6379.
El número de base es 0 (cero) por defecto.
Ejemplo: redis://localhost

Si el servidor Redis se ejecuta en la misma máquina, es posible conectarse mediante un socket Unix, para evitar la latencia de red. En este caso, el DSN es: redis-sock://PATH[#BASE]
La ruta debe apuntar al socket Unix (a menudo /var/run/redis.sock).
El número de base por defecto es 0 (cero).
Ejemplo: redis-sock:///var/run/redis.sock#2


3Llamadas unificadas

3.1Acceso tipo array

// verificación de la existencia de datos
if (isset($ndb['key1']))
    doSomething();

// leer datos (deserializados)
$data = $ndb['key1'];

// escribir datos (serializados)
$ndb['key1'] = $value;

// eliminar datos
unset($ndb['key1']);

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

3.2Métodos generales

// verificación de la existencia de datos
if ($ndb->isSet('user:1'))
    doSomething();

// eliminar datos
$ndb->remove('user:1');

// eliminar varios datos
$ndb->mRemove(['user:1', 'user:2', 'user:3']);

// eliminar datos a partir de una expresión regular
$ndb->clear('user:.*');

// eliminar todos los datos
$ndb->flush();

3.3Gestión de datos serializados complejos

// búsqueda de claves que coincidan con una expresión regular
$users = $ndb->search('user:.*');

// búsqueda por prefijo, con recuperación de datos (deserializados)
$users = $ndb->search('user:.*', true);

// búsqueda paginada (10 resultados a partir del vigésimo)
$users = $ndb->search('user:.*', true, 20, 10);

// leer datos (deserializados)
$user = $ndb->get('user:1');
// leer datos con valor por defecto
$color = $ndb->get('color', 'blue');
// leer datos con creación de datos si es necesario
$user = $ndb->get("user:$userId", function() use ($userId) {
    return $this->dao->get($userId);
});

// leer varios datos (deserializados)
$users = $ndb->mGet(['user:1', 'user:2', 'user:3']);

// escribir datos (serializados)
$ndb->set('user:1', $userData);
// escribir datos (serializados) con una vida útil de una hora
$ndb->set('user:1', $userData, 3600);

// escribir varios datos (serializados)
$ndb->mSet([
    'user:1' => $user1data,
    'user:2' => $user2data,
    'user:3' => $user3data,
]);
// escribir varios datos, con una vida útil de una hora
$ndb->mSet([
    'user:1' => $user1data,
    'user:2' => $user2data,
], 3600);

3.4Gestión de datos en bruto

// leer datos (en bruto)
$html = $ndb->read('page:home');
// leer datos con valor por defecto
$html = $ndb->read('page:home',
                         '<html><body><h1>Homepage</h1><body><html>');
// leer datos con creación de datos si es necesario
$html = $ndb->read('page:home', function() {
    return file_get_contents('/path/to/homepage.html');
});

// leer varios datos (en bruto)
$pages = $ndb->mRead(['page:home', 'page:admin', 'page:products']);

// copiar datos a un archivo local
$ndb->copyFrom('page:home', '/path/to/newpage.html');
// copiar datos a un archivo local, con valor por defecto
$ndb->copyFrom('page:home', '/path/to/newpage.html', $defaultHtml);
// copiar datos a un archivo local, con creación de datos si es necesario
$ndb->copyFrom('page:home', '/path/to/newpage.html', function() {
    return file_get_contents('/path/to/oldpage.html');
});
// copiar datos a un archivo local, con creación de datos si es necesario
// (con una vida útil de una hora)
$ndb->copyFrom('page:home', '/path/to/newpage.html', function() {
    return file_get_contents('/path/to/oldpage.html');
}, 3600);

// escribir datos (en bruto)
$ndb->write('color:blue', '#0000ff');
// escribir datos (en bruto) con una vida útil de una hora
$ndb->write('color:blue', '#0000ff', 3600);

// escribir varios datos (en bruto)
$ndb->mWrite([
    'color:blue'  => '#0000ff',
    'color:red'   => '#ff0000',
    'color:green' => '#00ff00',
]);
// escribir varios datos con una vida útil de una hora
$ndb->mWrite([
    'color:blue'  => '#0000ff',
    'color:red'   => '#ff0000',
], 3600);

// escribir datos (en bruto) a partir de un archivo local
$ndb->copyTo('page:home', '/path/to/homepage.html');
// escribir datos a partir de un archivo local, con una vida útil de una hora
$ndb->copyTo('page:home', '/path/to/homepage.html', 3600);

// escribir varios datos (en bruto) a partir de archivos locales
$ndb->mCopyTo([
    'page:home'     => '/path/to/homepage.html',
    'page:admin'    => '/path/to/admin.html',
    'page:products' => '/path/to/products.html',
]);
// escribir varios datos a partir de archivos locales con una vida útil de una hora
$ndb->mCopyTo([
    'page:home'  => '/path/to/homepage.html',
    'page:admin' => '/path/to/admin.html',
], 3600);