mirror of
https://github.com/predis/predis.git
synced 2026-08-18 10:11:47 +00:00
62b421f20e
This change reduces some unnecessary complexity in the library, Redis commands do not change much after all. Developers can still implement their own commands factory, inject new commands or override existing ones. The "profile" client options has been renamed to "commands" and it accepts instances of Predis\Command\FactoryInterface. The test suite checks at runtime the version of the running instance of Redis for integration tests to adapt itself automatically.
86 lines
2.5 KiB
PHP
86 lines
2.5 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\Aggregate\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' => function ($options) {
|
|
$commands = $options->getDefault('commands');
|
|
$commands->defineCommand('hmgetall', 'HashMultipleGetAll');
|
|
|
|
return $commands;
|
|
},
|
|
'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);
|