mirror of
https://github.com/predis/predis.git
synced 2026-08-22 09:40:57 +00:00
d34bdd38c3
All option classes have been moved in the Predis\Configuration\Option
namespace and some have been optimized to have less impact on client
initialization timings.
Furthermore the accepted values for some options have been changed,
this is the complete list of accepted values:
- _aggregate_: callable returning an aggregate connection.
- cluster: string value ("predis", "redis"), callable returning an
aggregate connection.
- replication: string value ("predis", "sentinel"), callable returning
an aggregate connection.
- commands: command factory, named array mapping command IDs to PHP
classes, callable returning a command factory or a named array.
- connections: connection factory, callable returning a connection
factory, named array mapping connection schemes to PHP classes.
- _prefix_: string value, command processor, callable.
- _exceptions_: boolean value.
Note that the cluster and replication options now return a closure
acting as initializer instead of an aggregate connection.
83 lines
2.4 KiB
PHP
83 lines
2.4 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) Daniele Alessandri <suppakilla@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
require __DIR__.'/shared.php';
|
|
|
|
// Predis allows to set Lua scripts as read-only operations for replication.
|
|
// This works for both EVAL and EVALSHA and also for the client-side abstraction
|
|
// built upon them (Predis\Command\ScriptCommand). This example shows a slightly
|
|
// more complex configuration that injects a new script command in the command
|
|
// factory used by the client and marks it as a read-only operation so that it
|
|
// will be executed on slaves.
|
|
|
|
use Predis\Command\ScriptCommand;
|
|
use Predis\Connection\Replication\MasterSlaveReplication;
|
|
use Predis\Replication\ReplicationStrategy;
|
|
|
|
// ------------------------------------------------------------------------- //
|
|
|
|
// Define a new script command that returns all the fields of a variable number
|
|
// of hashes with a single roundtrip.
|
|
|
|
class HashMultipleGetAll extends ScriptCommand
|
|
{
|
|
const BODY = <<<LUA
|
|
local hashes = {}
|
|
for _, key in pairs(KEYS) do
|
|
table.insert(hashes, key)
|
|
table.insert(hashes, redis.call('hgetall', key))
|
|
end
|
|
return hashes
|
|
LUA;
|
|
|
|
public function getScript()
|
|
{
|
|
return self::BODY;
|
|
}
|
|
}
|
|
|
|
// ------------------------------------------------------------------------- //
|
|
|
|
$parameters = array(
|
|
'tcp://127.0.0.1:6379/?alias=master',
|
|
'tcp://127.0.0.1:6380/?alias=slave',
|
|
);
|
|
|
|
$options = array(
|
|
'commands' => array(
|
|
'hmgetall' => 'HashMultipleGetAll',
|
|
),
|
|
'replication' => function () {
|
|
$strategy = new ReplicationStrategy();
|
|
$strategy->setScriptReadOnly(HashMultipleGetAll::BODY);
|
|
|
|
$replication = new MasterSlaveReplication($strategy);
|
|
|
|
return $replication;
|
|
},
|
|
);
|
|
|
|
// ------------------------------------------------------------------------- //
|
|
|
|
$client = new Predis\Client($parameters, $options);
|
|
|
|
// Execute the following commands on the master server using redis-cli:
|
|
// $ ./redis-cli HMSET metavars foo bar hoge piyo
|
|
// $ ./redis-cli HMSET servers master host1 slave host2
|
|
|
|
$hashes = $client->hmgetall('metavars', 'servers');
|
|
|
|
$replication = $client->getConnection();
|
|
$stillOnSlave = $replication->getCurrent() === $replication->getConnectionById('slave');
|
|
|
|
echo 'Is still on slave? ', $stillOnSlave ? 'YES!' : 'NO!', PHP_EOL;
|
|
var_export($hashes);
|