Data source: Redis


1Presentation

Temma can manage non-relational databases running on the Redis server.

If you have correctly configured the connection parameters to the Redis database, Temma automatically creates an object of type \Temma\Datasources\Redis. By convention, we will assume that you have named this connection ndb in the etc/temma.php file (see the configuration documentation).

The connection is then available in the controller by writing:

$this->ndb

In the other objects managed by the dependency injection component, the connection to the database is accessible by writing:

$loader->dataSources['ndb']

2Configuration

In the etc/temma.php file (see configuration documentation), you declare the DSN (Data Source Name) used to connect to the Redis server.

The DSN used to connect to a Redis server is written as: redis://SERVEUR[:PORT][/BASE]
The default port number is 6379.
The base number defaults to 0 (zero).
Example: redis://localhost

If the Redis server is running on the same machine, it's possible to connect using a Unix socket, to avoid network latency. In this case, the DSN is: redis-sock://PATH[#BASE]
The path must lead to the Unix socket (often /var/run/redis.sock).
The default base number is 0 (zero).
Example: redis-sock:///var/run/redis.sock#2


3Unified calls

3.1Array-like access

// verification of data existence
if (isset($this->ndb['key1']))
doSomething();

// read data (deserialized)
$data = $this->ndb['key1'];

// data writing (serialized)
$this->ndb['key1'] = $value;

// data deletion
unset($this->ndb['key1']);

// elements count
$nbr = count($this->ndb);

3.2General methods

// verification of data existence
if ($this->ndb->isSet('user:1'))
doSomething();

// data deletion
$this->ndb->remove('user:1');

// multiple data deletion
$this->ndb->mRemove(['user:1', 'user:2', 'user:3']);

// deleting data from a regular expression
$this->ndb->clear('user:.*');

// delete all data
$this->ndb->flush();

3.3Management of complex serialized data

// search for keys matching a regular expression
$users = $this->ndb->search('user:.*');

// prefix-based key search, with data recovery (deserialized)
$users = $this->ndb->search('user:.*', true);

// read data (deserialized)
$user = $this->ndb->get('user:1');
// read data with default value
$color = $this->ndb->get('color', 'blue');
// read data with data creation if necessary
$user = $this->ndb->get("user:$userId", function() use ($userId) {
return $this->dao->get($userId);
});

// read multiple data (deserialized)
$users = $this->ndb->mGet(['user:1', 'user:2', 'user:3']);

// data writing (serialized)
$this->ndb->set('user:1', $userData);
// write (serialized) data with a lifetime of one hour
$this->ndb->set('user:1', $userData, 3600);

// multiple data writing (serialized)
$this->ndb->mSet([
'user:1' => $user1data,
'user:2' => $user2data,
'user:3' => $user3data,
]);
// write multiple data, with a lifetime of one hour
$this->ndb->mSet([
'user:1' => $user1data,
'user:2' => $user2data,
], 3600);

3.4Raw data management

// read data (raw)
$html = $this->ndb->read('page:home');
// read data with default value
$html = $this->ndb->read('page:home',
		 '<html><body><h1>Homepage</h1><body><html>');
// read data with data creation if necessary
$html = $this->ndb->read('page:home', function() {
return file_get_contents('/path/to/homepage.html');
});

// read multiple (raw) data
$pages = $this->ndb->mRead(['page:home', 'page:admin', 'page:products']);

// copy data to a local file
$this->ndb->copyFrom('page:home', '/path/to/newpage.html');
// copy data to local file, with default value
$this->ndb->copyFrom('page:home', '/path/to/newpage.html', $defaultHtml);
// copy data to a local file, with data creation if necessary
$this->ndb->copyFrom('page:home', '/path/to/newpage.html', function() {
return file_get_contents('/path/to/oldpage.html');
});
// copy data to a local file, with data creation if necessary
// (with a lifetime of one hour)
$this->ndb->copyFrom('page:home', '/path/to/newpage.html', function() {
return file_get_contents('/path/to/oldpage.html');
}, 3600);

// data writing (raw)
$this->ndb->write('color:blue', '#0000ff');
// data writing (raw) with a lifetime of one hour
$this->ndb->write('color:blue', '#0000ff', 3600);

// write multiple (raw) data
$this->ndb->mWrite({
'color:blue'  => '#0000ff',
'color:red'   => '#ff0000',
'color:green' => '#00ff00',
]);
// write multiple data with a lifetime of one hour
$this->ndb->mWrite({
'color:blue'  => '#0000ff',
'color:red'   => '#ff0000',
], 3600);

// write (raw) data from a local file
$this->ndb->copyTo('page:home', '/path/to/homepage.html');
// write data from a local file, with a lifetime of one hour
$this->ndb->copyTo('page:home', '/path/to/homepage.html', 3600);

// write multiple (raw) data from local files
$this->ndb->mCopyTo([
'page:home'     => '/path/to/homepage.html',
'page:admin'    => '/path/to/admin.html',
'page:products' => '/path/to/products.html',
]);
// write multiple data from local files with a lifetime of one hour
$this->ndb->mCopyTo([
'page:home'  => '/path/to/homepage.html',
'page:admin' => '/path/to/admin.html',
], 3600);