Commit Graph

1322 Commits

Author SHA1 Message Date
Daniele Alessandri 712e6420e9 Rewrite parts of Predis\Transaction\MultiExec to make them less ugly.
We also changed some options for this class, the accepted ones are:

  - "keys": string or array of strings for automatic WATCH.
  - "cas": sets the check-and-set mode.
  - "retry": number of attempts before giving up aborted transactions.
  - "exceptions": sets whether exceptions should be thrown on error
    responses (overrides the "exceptions" client option).

The "on_retry" option has been removed.
2013-11-17 15:57:43 +01:00
Daniele Alessandri 84e0f5af7a Extract the tracking of transaction states to a separate class.
The Predis\Transaction\MultiExecState class is actually quite dummy as
it does not work as a finite-state machine, but is used to track state
using flags. It basically replicates the same behaviour of when it was
part of the Predis\Transaction\MultiExec code and it will do for now.
2013-11-17 13:15:36 +01:00
Daniele Alessandri c047c4992a Merge branch 'v0.9/pipeline-refactoring' 2013-11-17 11:07:24 +01:00
Daniele Alessandri ce706a375c Merge branch 'v0.9/add-commands' 2013-11-17 11:06:22 +01:00
Daniele Alessandri 66f22899a1 Update CHANGELOG. 2013-11-17 11:04:03 +01:00
Daniele Alessandri 620adb2fe6 New command: PUBSUB (Redis 2.8). 2013-11-17 11:02:37 +01:00
Daniele Alessandri 1b5e2d0d0d New command: SENTINEL (Redis 2.6). 2013-11-17 11:02:33 +01:00
Daniele Alessandri 3d499e82a3 Add some supported options to Predis\Client::pipeline().
Only two options available for now, used to specify which kind of
pipeline object the client should use or return:

  - "atomic": returns a pipeline wrapped in a MULTI / EXEC transaction
    (class: Predis\Pipeline\Atomic).
  - "fire-and-forget": returns a pipeline that does not read back
    responses from the server (class: Predis\Pipeline\FireAndForget).

We might add more options in the future.
2013-11-16 21:54:17 +01:00
Daniele Alessandri 8068c87e47 Rewrite a good chunk of the classes in the Predis\Pipeline namespace.
First of all we completely removed the concept of pipeline executors.
Now pipelines can be easily customized by extending our default class
Predis\Pipeline\Pipeline.

Tests coverage for the Predis\Pipeline namespace is decent but can be
definitely improved while test cases can be beautified.
2013-11-16 21:23:49 +01:00
Daniele Alessandri c6f51e82bf Rename "Array" type-hint to to "array". 2013-11-16 17:01:58 +01:00
Daniele Alessandri 944da8c9b8 Rename Predis\Cluster\Hash\CRC16HashGenerator. 2013-11-16 16:41:00 +01:00
Daniele Alessandri f01ef33735 Merge branch 'v0.9/rename-transaction-class' 2013-11-16 16:35:07 +01:00
Daniele Alessandri aaac082324 Rename classes in Predis\Transaction. 2013-11-16 16:34:34 +01:00
Daniele Alessandri aa210aeb03 Merge branch 'v0.9/rename-cluster-classes' 2013-11-16 16:22:37 +01:00
Daniele Alessandri e6f1788e27 Rename interfaces and classes in the Predis\Cluster namespace.
A few methods were renamed accordingly for consistency
2013-11-16 16:21:27 +01:00
Daniele Alessandri c26b6763f9 Merge branch 'v0.9/rename-monitorcontext' 2013-11-16 15:43:16 +01:00
Daniele Alessandri 9d2cb975eb Rename classes in Predis\Monitor namespace. 2013-11-16 15:42:56 +01:00
Daniele Alessandri 2e6a76d83e Fix phpdocs. 2013-11-16 15:33:39 +01:00
Daniele Alessandri 046715a455 Merge branch 'v0.9/rename-pubsubcontext' 2013-11-16 15:28:54 +01:00
Daniele Alessandri c3a58dffdf Rename classes in the Predis\PubSub namespace. 2013-11-16 15:27:58 +01:00
Daniele Alessandri 7d60e995f8 Rename session handler class. 2013-11-16 15:03:05 +01:00
Daniele Alessandri f18d7103f5 [tests] Remove useless backslash in "use" directive. 2013-11-16 14:57:00 +01:00
Daniele Alessandri e42c72c043 Merge branch 'v0.9/rename-response-classes' 2013-11-16 14:04:25 +01:00
Daniele Alessandri 621c3d7fd3 Update CHANGELOG. 2013-11-16 14:03:17 +01:00
Daniele Alessandri b71c798f9b Rename classes in Predis\Response and Predis\Response\Iterator.
This change aims to make class names shorter with less redundant fully
qualified names.

Merge!
2013-11-16 14:01:11 +01:00
Daniele Alessandri 1022be6010 [tests] Fix tests. 2013-11-16 12:54:09 +01:00
Daniele Alessandri e41db42b01 Merge branch 'v0.9/response-namespace' 2013-11-16 12:50:45 +01:00
Daniele Alessandri ecd4c6281c Update CHANGELOG. 2013-11-16 12:48:37 +01:00
Daniele Alessandri 35ce43d526 Update CHANGELOG. 2013-11-16 12:44:56 +01:00
Daniele Alessandri 7f9d06bb83 Move the Predis\Iterator namespace into Predis\Response. 2013-11-16 12:07:35 +01:00
Daniele Alessandri a8edc02eb6 Create the Predis\Response namespace.
All of the response interface, classes and exceptions have been moved
into this namespace.
2013-11-16 11:59:33 +01:00
Daniele Alessandri 205ffbbd73 Update composer.json. 2013-11-16 11:27:47 +01:00
Daniele Alessandri b0f955b437 Fix phpdocs.
[ci skip]
2013-11-12 19:49:55 +01:00
Daniele Alessandri 8d15e5ec08 Do not pipeline initialization commands. 2013-11-12 18:16:54 +01:00
Daniele Alessandri 6fbc421b96 Fix URI parsing on multiple equal signs in pair value of query string. 2013-11-12 12:46:45 +01:00
Daniele Alessandri 298e7a14fa [tests] Add @medium since this could take a little bit more than 1sec. 2013-11-12 12:34:51 +01:00
Daniele Alessandri 22c2230d00 [tests] Rename just a couple of test methods. 2013-11-12 12:31:49 +01:00
Daniele Alessandri a1c7889584 Add option "aggregate" to customize multiple connections aggregation.
This option must return a callable object that is used to override how
the client aggregates connections when passing an array of parameters
to its constructor.

When specified, this option overrides both "cluster" and "replication"
as it allows to make use of your own code to aggregate multiple nodes.

This is, for example, how you can mimic the standard initialization of
a cluster that relies on client-side sharding:

  $parameters = ['tcp://127.0.0.1:6380', 'tcp://127.0.0.1:6381'];

  $options = [
    'aggregate' => function () {
      return function ($parameters, $options) {
          $connection = new Predis\Connection\PredisCluster();
          $options->connections->aggregate($connection, $parameters);

          return $connection;
      };
    },
  ];

  $client = new Predis\Client($parameters, $options);

When invoked by the client, the specified callable must always return
a Predis\Connection\ConnectionInterface instance or the client will
throw an UnexpectedValueException.
2013-11-12 12:31:45 +01:00
Daniele Alessandri 5e90e615b1 Minor optimizations for the parsing of URI parameters.
Using list() with the warning suppressor is slower than using isset()
to check the presence of the first two elements of the array returned
by explode(). This also allow us to skip incomplete query string pairs
when parsing the URI string.

We have also changed the exception being thrown on invalid URIs to a
more appropriate one.
2013-11-11 18:59:21 +01:00
Daniele Alessandri 321d2624ab Rename URI parsing method of Predis\Connection\ConnectionParameters. 2013-11-11 18:30:42 +01:00
Daniele Alessandri acd29ec076 Slightly change interface for connection factories. 2013-11-11 18:24:20 +01:00
Daniele Alessandri 3c6389f4dd Rework how connection parameters are handled.
These changes do not affect the actual functionalities of the client,
but make the code more explicit and less error-prone.
2013-11-11 18:17:09 +01:00
Daniele Alessandri 1d53f8a988 Minor code styling changes. 2013-11-11 15:59:21 +01:00
Daniele Alessandri dd679661dd Address #133 by reusing our own methods.
The main reason behind that code duplication was performance related
as we tried to reduce method calls when possible, even at the cost of
falling into the realm of early optimizations. Apparently we just lose
~400 req/sec on a 21000 req/sec basis ("SET foo bar") using PHP 5.5.3
(packaged by Ubuntu 13.10) on an Intel Q6600, so we will most likely
stick with this change for the sake of best practices.
2013-11-11 15:49:16 +01:00
Daniele Alessandri f36138c0b7 Minor internal change.
Check directly the private parameters array instead of passing through
method dispatching for the outer __isset() method.
2013-11-11 15:28:42 +01:00
Daniele Alessandri 31e08f0d5d Tweak phpdocs. 2013-11-11 12:29:43 +01:00
Daniele Alessandri cdb91284f1 Clean up ugly code bits. 2013-11-10 12:30:24 +01:00
Daniele Alessandri 38c7697881 Remove useless method. 2013-11-10 12:27:15 +01:00
Daniele Alessandri b45ba55f46 Switch to protected visibility for some members of Predis\Client.
The "profile" member is actually used for caching purposes as fetching
its value from the options instance would add noticeable overhead in a
part of the client where every bit of optimization matters, for this
we decided to keep it private.
2013-11-10 12:20:20 +01:00
Daniele Alessandri b50b90aa66 Rename method. 2013-11-10 12:17:58 +01:00