table.insert(hashes, key) table.insert(hashes, redis.call('hgetall', key)) end return hashes EOS; 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('profile' => function ($options) { $profile = ServerProfile::get('2.6'); $profile->defineCommand('hmgetall', 'HashMultipleGetAll'); return $profile; }, 'replication' => function ($options) { $replication = new MasterSlaveReplication(); $replication->setScriptReadOnly(HashMultipleGetAll::BODY); 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', "!\n"; var_export($hashes);
/** * @group disconnected */ public function testCanSetReadOnlyFlagForEvalScripts() { $profile = ServerProfile::get('dev'); $cmdEval = $profile->createCommand('eval', array($script = "return redis.call('info');")); $cmdEvalSha = $profile->createCommand('evalsha', array($scriptSHA1 = sha1($script))); $master = $this->getMockConnection('tcp://host1?alias=master'); $master->expects($this->never())->method('executeCommand'); $slave1 = $this->getMockConnection('tcp://host2?alias=slave1'); $slave1->expects($this->exactly(2))->method('executeCommand')->with($this->logicalOr($cmdEval, $cmdEvalSha)); $replication = new MasterSlaveReplication(); $replication->add($master); $replication->add($slave1); $replication->setScriptReadOnly($script); $replication->executeCommand($cmdEval); $replication->executeCommand($cmdEvalSha); }