/**
  * {@inheritdoc}
  */
 public function serialize(CommandInterface $command)
 {
     $commandID = $command->getId();
     $arguments = $command->getArguments();
     $cmdlen = strlen($commandID);
     $reqlen = count($arguments) + 1;
     $buffer = "*{$reqlen}\r\n\${$cmdlen}\r\n{$commandID}\r\n";
     for ($i = 0, $reqlen--; $i < $reqlen; ++$i) {
         $argument = $arguments[$i];
         $arglen = strlen($argument);
         $buffer .= "\${$arglen}\r\n{$argument}\r\n";
     }
     return $buffer;
 }
 /**
  * Checks if a SORT command is a readable operation by parsing the arguments
  * array of the specified commad instance.
  *
  * @param CommandInterface $command Command instance.
  *
  * @return bool
  */
 protected function isSortReadOnly(CommandInterface $command)
 {
     $arguments = $command->getArguments();
     return ($c = count($arguments)) === 1 ? true : $arguments[$c - 2] !== 'STORE';
 }
 /**
  * {@inheritdoc}
  */
 public function writeRequest(CommandInterface $command)
 {
     $commandID = $command->getId();
     $arguments = $command->getArguments();
     $cmdlen = strlen($commandID);
     $reqlen = count($arguments) + 1;
     $buffer = "*{$reqlen}\r\n\${$cmdlen}\r\n{$commandID}\r\n";
     for ($i = 0, $reqlen--; $i < $reqlen; ++$i) {
         $argument = $arguments[$i];
         $arglen = strlen($argument);
         $buffer .= "\${$arglen}\r\n{$argument}\r\n";
     }
     $this->write($buffer);
 }
 /**
  * {@inheritdoc}
  */
 public function writeRequest(CommandInterface $command)
 {
     $arguments = $command->getArguments();
     array_unshift($arguments, $command->getId());
     $this->write(phpiredis_format_command($arguments));
 }
 /**
  * Extracts the key from EVAL and EVALSHA commands.
  *
  * @param CommandInterface $command Command instance.
  *
  * @return string|null
  */
 protected function getKeyFromScriptingCommands(CommandInterface $command)
 {
     if ($command instanceof ScriptCommand) {
         $keys = $command->getKeys();
     } else {
         $keys = array_slice($args = $command->getArguments(), 2, $args[1]);
     }
     if ($keys && $this->checkSameSlotForKeys($keys)) {
         return $keys[0];
     }
 }
 /**
  * Applies the specified prefix to the key of a MIGRATE command.
  *
  * @param CommandInterface $command Command instance.
  * @param string           $prefix  Prefix string.
  */
 public static function migrate(CommandInterface $command, $prefix)
 {
     if ($arguments = $command->getArguments()) {
         $arguments[2] = "{$prefix}{$arguments[2]}";
         $command->setRawArguments($arguments);
     }
 }