mirror of
https://github.com/predis/predis.git
synced 2026-08-30 04:02:22 +00:00
Merge pull request #47 from GunioRobot/clean
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
*** PLEASE READ ***
|
||||
|
||||
The library code in this branch is the result of a major rewrite of Predis 0.6
|
||||
and is considered of BETA quality, which means that there should not be any
|
||||
known outstanding bug and that the internal API is almost finalized and fixed
|
||||
The library code in this branch is the result of a major rewrite of Predis 0.6
|
||||
and is considered of BETA quality, which means that there should not be any
|
||||
known outstanding bug and that the internal API is almost finalized and fixed
|
||||
(but it could still be subject to slight changes if needed).
|
||||
|
||||
Feedback is obviously appreciated and even if things should just work, use it
|
||||
at your own risk! If you need to use Predis in a production environment please
|
||||
Feedback is obviously appreciated and even if things should just work, use it
|
||||
at your own risk! If you need to use Predis in a production environment please
|
||||
use a tagged release or checkout the version-0.6 branch from the repository.
|
||||
|
||||
@@ -3,13 +3,13 @@ v0.7.0 (2010-xx-xx)
|
||||
|
||||
* List of the methods removed in this release:
|
||||
- Predis\Client::create()
|
||||
This method has been removed because it was considered redundant
|
||||
This method has been removed because it was considered redundant
|
||||
with Predis\Client::__construct() since Predis 0.6.0.
|
||||
- Predis\Client::pipelineSafe()
|
||||
This method was deprecated in Predis 0.6.1 and now it has been finally
|
||||
This method was deprecated in Predis 0.6.1 and now it has been finally
|
||||
removed. Use Predis\Client::pipeline(array('safe' => true)).
|
||||
- Predis\Client::rawCommand()
|
||||
This method was removed due to interface inconsistencies with the
|
||||
This method was removed due to interface inconsistencies with the
|
||||
underlying connection class used internally by the client instance.
|
||||
- Predis\Client::setProfile()
|
||||
This method is no more part of the public API and has been made private.
|
||||
@@ -17,30 +17,30 @@ v0.7.0 (2010-xx-xx)
|
||||
* Predis now includes its own autoloader. To use it, include Autoloader.php
|
||||
and call Predis\Autoloader::register().
|
||||
|
||||
* The Predis\MultiBulkCommand class has been merged into Predis\Command and
|
||||
thus removed. If you have code that extends Predis\MultiBulkCommand but
|
||||
you can not afford to update your code, you can always implement it again
|
||||
* The Predis\MultiBulkCommand class has been merged into Predis\Command and
|
||||
thus removed. If you have code that extends Predis\MultiBulkCommand but
|
||||
you can not afford to update your code, you can always implement it again
|
||||
as an abstract class simply by extending Predis\Command.
|
||||
|
||||
* The Predis\IConnection interface has been splitted in two different new
|
||||
* The Predis\IConnection interface has been splitted in two different new
|
||||
interfaces: Predis\IConnectionSingle and Predis\IConnectionCluster.
|
||||
|
||||
* Developers can now register their own classes that implements the
|
||||
Predis\IConnectionSingle interface to handle different URI schemes such as
|
||||
'tcp', 'unix', 'udp' or anything else. Everything is handled by the new
|
||||
* Developers can now register their own classes that implements the
|
||||
Predis\IConnectionSingle interface to handle different URI schemes such as
|
||||
'tcp', 'unix', 'udp' or anything else. Everything is handled by the new
|
||||
Predis\ConnectionFactory class.
|
||||
|
||||
* Added support for UNIX domain sockets (supported by Redis 2.2) with the new
|
||||
* Added support for UNIX domain sockets (supported by Redis 2.2) with the new
|
||||
Predis\UnixDomainSocketConnection class and the 'unix' scheme.
|
||||
|
||||
* Added the new Predis\ICommand interface. The Predis\Command class now
|
||||
* Added the new Predis\ICommand interface. The Predis\Command class now
|
||||
implements this interface that is used in the core bits of Predis.
|
||||
|
||||
* Implicit extraction of arguments when the only argument passed to a
|
||||
multibulk command is an array is not supported anymore and must be done
|
||||
* Implicit extraction of arguments when the only argument passed to a
|
||||
multibulk command is an array is not supported anymore and must be done
|
||||
explicitly inside Predis\Command::filterArguments().
|
||||
|
||||
* It is now possible to pass instances of Predis\ConnectionParameters and
|
||||
* It is now possible to pass instances of Predis\ConnectionParameters and
|
||||
Predis\IConnection as parameters of Predis\Client::__construct().
|
||||
|
||||
v0.6.5 (2011-02-12)
|
||||
@@ -49,14 +49,14 @@ v0.6.5 (2011-02-12)
|
||||
desynchronization errors (ISSUE #20).
|
||||
|
||||
v0.6.4 (2011-02-12)
|
||||
* Various performance improvements (15% ~ 25%) especially when dealing with
|
||||
* Various performance improvements (15% ~ 25%) especially when dealing with
|
||||
long multibulk replies or when using clustered connections.
|
||||
|
||||
* Added the "on_retry" option to Predis\MultiExecBlock that can be used to
|
||||
specify an external callback (or any callable object) that gets invoked
|
||||
* Added the "on_retry" option to Predis\MultiExecBlock that can be used to
|
||||
specify an external callback (or any callable object) that gets invoked
|
||||
whenever a transaction is aborted by the server.
|
||||
|
||||
* Added inline (p)subscribtion via options when initializing an instance of
|
||||
* Added inline (p)subscribtion via options when initializing an instance of
|
||||
Predis\PubSubContext.
|
||||
|
||||
v0.6.3 (2011-01-01)
|
||||
@@ -64,10 +64,10 @@ v0.6.3 (2011-01-01)
|
||||
- Strings: SETRANGE, GETRANGE, SETBIT, GETBIT
|
||||
- Lists : BRPOPLPUSH
|
||||
|
||||
* The abstraction for MULTI/EXEC transactions has been dramatically improved
|
||||
by providing support for check-and-set (CAS) operations when using Redis >=
|
||||
2.2. Aborted transactions can also be optionally replayed in automatic up
|
||||
to a user-defined number of times, after which a Predis\AbortedMultiExec
|
||||
* The abstraction for MULTI/EXEC transactions has been dramatically improved
|
||||
by providing support for check-and-set (CAS) operations when using Redis >=
|
||||
2.2. Aborted transactions can also be optionally replayed in automatic up
|
||||
to a user-defined number of times, after which a Predis\AbortedMultiExec
|
||||
exception is thrown.
|
||||
|
||||
v0.6.2 (2010-11-28)
|
||||
@@ -79,17 +79,17 @@ v0.6.2 (2010-11-28)
|
||||
- ZSets : ZREVRANGEBYSCORE
|
||||
- Misc. : PERSIST
|
||||
|
||||
* WATCH also accepts a single array parameter with the keys that should be
|
||||
* WATCH also accepts a single array parameter with the keys that should be
|
||||
monitored during a transaction.
|
||||
|
||||
* Improved the behaviour of Predis\MultiExecBlock in certain corner cases.
|
||||
|
||||
* Improved parameters checking for the SORT command.
|
||||
|
||||
* FIX: the STORE parameter for the SORT command didn't work correctly when
|
||||
* FIX: the STORE parameter for the SORT command didn't work correctly when
|
||||
using '0' as the target key (ISSUE #13).
|
||||
|
||||
* FIX: the methods for UNWATCH and DISCARD do not break anymore method
|
||||
* FIX: the methods for UNWATCH and DISCARD do not break anymore method
|
||||
chaining with Predis\MultiExecBlock.
|
||||
|
||||
v0.6.1 (2010-07-11)
|
||||
@@ -98,147 +98,147 @@ v0.6.1 (2010-07-11)
|
||||
* New commands available in the Redis v2.2 profile (dev):
|
||||
- Misc. : WATCH, UNWATCH
|
||||
|
||||
* Optional modifiers for ZRANGE, ZREVRANGE and ZRANGEBYSCORE queries are
|
||||
supported using an associative array passed as the last argument of their
|
||||
* Optional modifiers for ZRANGE, ZREVRANGE and ZRANGEBYSCORE queries are
|
||||
supported using an associative array passed as the last argument of their
|
||||
respective methods.
|
||||
|
||||
* The LIMIT modifier for ZRANGEBYSCORE can be specified using either:
|
||||
* The LIMIT modifier for ZRANGEBYSCORE can be specified using either:
|
||||
- an indexed array: array($offset, $count)
|
||||
- an associative array: array('offset' => $offset, 'count' => $count)
|
||||
|
||||
* The method Predis\Client::__construct() now accepts also instances of
|
||||
* The method Predis\Client::__construct() now accepts also instances of
|
||||
Predis\ConnectionParameters.
|
||||
|
||||
* Predis\MultiExecBlock and Predis\PubSubContext now throw an exception
|
||||
when trying to create their instances using a profile that does not
|
||||
support the required Redis commands or when the client is connected to
|
||||
* Predis\MultiExecBlock and Predis\PubSubContext now throw an exception
|
||||
when trying to create their instances using a profile that does not
|
||||
support the required Redis commands or when the client is connected to
|
||||
a cluster of connections.
|
||||
|
||||
* Various improvements to Predis\MultiExecBlock:
|
||||
- fixes and more consistent behaviour across various usage cases.
|
||||
- support for WATCH and UNWATCH when using the current development
|
||||
- support for WATCH and UNWATCH when using the current development
|
||||
profile (Redis v2.2) and aborted transactions.
|
||||
|
||||
* New signature for Predis\Client::multiExec() which is now able to accept
|
||||
an array of options for the underlying instance of Predis\MultiExecBlock.
|
||||
* New signature for Predis\Client::multiExec() which is now able to accept
|
||||
an array of options for the underlying instance of Predis\MultiExecBlock.
|
||||
Backwards compatibility with previous releases of Predis is ensured.
|
||||
|
||||
* New signature for Predis\Client::pipeline() which is now able to accept
|
||||
an array of options for the underlying instance of Predis\CommandPipeline.
|
||||
Backwards compatibility with previous releases of Predis is ensured.
|
||||
* New signature for Predis\Client::pipeline() which is now able to accept
|
||||
an array of options for the underlying instance of Predis\CommandPipeline.
|
||||
Backwards compatibility with previous releases of Predis is ensured.
|
||||
The method Predis\Client::pipelineSafe() is to be considered deprecated.
|
||||
|
||||
* FIX: The WEIGHT modifier for ZUNIONSTORE and ZINTERSTORE was handled
|
||||
* FIX: The WEIGHT modifier for ZUNIONSTORE and ZINTERSTORE was handled
|
||||
incorrectly with more than two weights specified.
|
||||
|
||||
v0.6.0 (2010-05-24)
|
||||
* Switched to the new multi-bulk request protocol for all of the commands
|
||||
in the Redis 1.2 and Redis 2.0 profiles. Inline and bulk requests are now
|
||||
* Switched to the new multi-bulk request protocol for all of the commands
|
||||
in the Redis 1.2 and Redis 2.0 profiles. Inline and bulk requests are now
|
||||
deprecated as they will be removed in future releases of Redis.
|
||||
|
||||
* The default server profile is "2.0" (targeting Redis 2.0.x). If you are
|
||||
using older versions of Redis, it is highly recommended that you specify
|
||||
which server profile the client should use (e.g. "1.2" when connecting
|
||||
* The default server profile is "2.0" (targeting Redis 2.0.x). If you are
|
||||
using older versions of Redis, it is highly recommended that you specify
|
||||
which server profile the client should use (e.g. "1.2" when connecting
|
||||
to instances of Redis 1.2.x).
|
||||
|
||||
* Support for Redis 1.0 is now optional and it is provided by requiring
|
||||
* Support for Redis 1.0 is now optional and it is provided by requiring
|
||||
'Predis_Compatibility.php' before creating an instance of Predis\Client.
|
||||
|
||||
* New commands added to the Redis 2.0 profile since Predis 0.5.1:
|
||||
- Strings: SETEX, APPEND, SUBSTR
|
||||
- ZSets : ZCOUNT, ZRANK, ZUNIONSTORE, ZINTERSTORE, ZREMBYRANK, ZREVRANK
|
||||
- Hashes : HSET, HSETNX, HMSET, HINCRBY, HGET, HMGET, HDEL, HEXISTS,
|
||||
- Hashes : HSET, HSETNX, HMSET, HINCRBY, HGET, HMGET, HDEL, HEXISTS,
|
||||
HLEN, HKEYS, HVALS, HGETALL
|
||||
- PubSub : PUBLISH, SUBSCRIBE, UNSUBSCRIBE
|
||||
- Misc. : DISCARD, CONFIG
|
||||
|
||||
* Introduced client-level options with the new Predis\ClientOptions class.
|
||||
Options can be passed to Predis\Client::__construct in its second argument
|
||||
as an array or an instance of Predis\ClientOptions. For brevity's sake and
|
||||
compatibility with older versions, the constructor of Predis\Client still
|
||||
* Introduced client-level options with the new Predis\ClientOptions class.
|
||||
Options can be passed to Predis\Client::__construct in its second argument
|
||||
as an array or an instance of Predis\ClientOptions. For brevity's sake and
|
||||
compatibility with older versions, the constructor of Predis\Client still
|
||||
accepts an instance of Predis\RedisServerProfile in its second argument.
|
||||
The currently supported client options are:
|
||||
- profile [default: "2.0" as of Predis 0.6.0]
|
||||
specifies which server profile to use when connecting to Redis. This
|
||||
option accepts an instance of Predis\RedisServerProfile or a string
|
||||
specifies which server profile to use when connecting to Redis. This
|
||||
option accepts an instance of Predis\RedisServerProfile or a string
|
||||
that indicates the target version.
|
||||
- key_distribution [default: Predis\Distribution\HashRing]
|
||||
specifies which key distribution strategy to use to distribute keys
|
||||
among the servers that compose a cluster. This option accepts an
|
||||
instance of Predis\Distribution\IDistributionStrategy so that users
|
||||
can implement their own key distribution strategy. Optionally, the new
|
||||
Predis\Distribution\KetamaPureRing class also provides a pure-PHP
|
||||
specifies which key distribution strategy to use to distribute keys
|
||||
among the servers that compose a cluster. This option accepts an
|
||||
instance of Predis\Distribution\IDistributionStrategy so that users
|
||||
can implement their own key distribution strategy. Optionally, the new
|
||||
Predis\Distribution\KetamaPureRing class also provides a pure-PHP
|
||||
implementation of the same algorithm used by libketama.
|
||||
- throw_on_error [default: TRUE]
|
||||
server errors can optionally be handled "silently": instead of throwing
|
||||
server errors can optionally be handled "silently": instead of throwing
|
||||
an exception, the client returns an error response type.
|
||||
- iterable_multibulk [EXPERIMENTAL - default: FALSE]
|
||||
in addition to the classic way of fetching a whole multibulk reply
|
||||
into an array, the client can now optionally stream a multibulk reply
|
||||
down to the user code by using PHP iterators. It is just a little bit
|
||||
in addition to the classic way of fetching a whole multibulk reply
|
||||
into an array, the client can now optionally stream a multibulk reply
|
||||
down to the user code by using PHP iterators. It is just a little bit
|
||||
slower, but it can save a lot of memory in certain scenarios.
|
||||
|
||||
* New parameters for connections:
|
||||
* New parameters for connections:
|
||||
- alias [default: not set]
|
||||
every connection can now be identified by an alias that is useful to
|
||||
every connection can now be identified by an alias that is useful to
|
||||
get a certain connection when connected to a cluster of Redis servers.
|
||||
- weight [default: not set]
|
||||
allows the client to balance the keys asymmetrically across multiple
|
||||
servers. This might be useful when you have servers with different
|
||||
amounts of memory and you want to distribute the load of your keys
|
||||
allows the client to balance the keys asymmetrically across multiple
|
||||
servers. This might be useful when you have servers with different
|
||||
amounts of memory and you want to distribute the load of your keys
|
||||
accordingly.
|
||||
- connection_async [default: FALSE]
|
||||
estabilish connections to servers in a non-blocking way, so that the
|
||||
client is not blocked while the underlying resource performs the actual
|
||||
estabilish connections to servers in a non-blocking way, so that the
|
||||
client is not blocked while the underlying resource performs the actual
|
||||
connection.
|
||||
- connection_persistent [default: FALSE]
|
||||
the underlying connection resource is left open when a script ends its
|
||||
lifecycle. Persistent connections can lead to unpredictable or strange
|
||||
the underlying connection resource is left open when a script ends its
|
||||
lifecycle. Persistent connections can lead to unpredictable or strange
|
||||
behaviours, so they should be used with extreme care.
|
||||
|
||||
* Introduced the Predis\Pipeline\IPipelineExecutor interface. Classes that
|
||||
implements this interface are used internally by the Predis\CommandPipeline
|
||||
class to change the behaviour of the pipeline when writing/reading commands
|
||||
* Introduced the Predis\Pipeline\IPipelineExecutor interface. Classes that
|
||||
implements this interface are used internally by the Predis\CommandPipeline
|
||||
class to change the behaviour of the pipeline when writing/reading commands
|
||||
from one or multiple servers. Here is the list of the default executors:
|
||||
- Predis\Pipeline\StandardExecutor
|
||||
Exceptions generated by server errors might be thrown depending on the
|
||||
options passed to the client (see "throw_on_error"). Instead, protocol
|
||||
or network errors always throw exceptions. This is the default executor
|
||||
for single and clustered connections and shares the same behaviour of
|
||||
Exceptions generated by server errors might be thrown depending on the
|
||||
options passed to the client (see "throw_on_error"). Instead, protocol
|
||||
or network errors always throw exceptions. This is the default executor
|
||||
for single and clustered connections and shares the same behaviour of
|
||||
Predis 0.5.x.
|
||||
- Predis\Pipeline\SafeExecutor
|
||||
Exceptions generated by server, protocol or network errors are not
|
||||
thrown, instead they are returned in the response array as instances of
|
||||
Exceptions generated by server, protocol or network errors are not
|
||||
thrown, instead they are returned in the response array as instances of
|
||||
ResponseError or CommunicationException.
|
||||
- Predis\Pipeline\SafeClusterExecutor
|
||||
This executor shares the same behaviour of Predis\Pipeline\SafeExecutor
|
||||
This executor shares the same behaviour of Predis\Pipeline\SafeExecutor
|
||||
but it is geared towards clustered connections.
|
||||
|
||||
* Support for PUBSUB is handled by the new Predis\PubSubContext class, which
|
||||
* Support for PUBSUB is handled by the new Predis\PubSubContext class, which
|
||||
could also be used to build a callback dispatcher for PUBSUB scenarios.
|
||||
|
||||
* When connected to a cluster of connections, it is now possible to get a
|
||||
new Predis\Client instance for a single connection of the cluster by
|
||||
* When connected to a cluster of connections, it is now possible to get a
|
||||
new Predis\Client instance for a single connection of the cluster by
|
||||
passing its alias/index to the new Predis\Client::getClientFor() method.
|
||||
|
||||
* CommandPipeline and MultiExecBlock return their instances when invoking
|
||||
* CommandPipeline and MultiExecBlock return their instances when invoking
|
||||
commands, thus allowing method chaining in pipelines and multi-exec blocks.
|
||||
|
||||
* MultiExecBlock instances can handle the new DISCARD command.
|
||||
|
||||
* Connections now support float values for the connection_timeout parameter
|
||||
* Connections now support float values for the connection_timeout parameter
|
||||
to express timeouts with a microsecond resolution.
|
||||
|
||||
* FIX: TCP connections now respect the read/write timeout parameter when
|
||||
reading the payload of server responses. Previously, stream_get_contents()
|
||||
was being used internally to read data from a connection but it looks like
|
||||
PHP does not honour the specified timeout for socket streams when inside
|
||||
* FIX: TCP connections now respect the read/write timeout parameter when
|
||||
reading the payload of server responses. Previously, stream_get_contents()
|
||||
was being used internally to read data from a connection but it looks like
|
||||
PHP does not honour the specified timeout for socket streams when inside
|
||||
this function.
|
||||
|
||||
* FIX: The GET parameter for the SORT command now accepts also multiple key
|
||||
* FIX: The GET parameter for the SORT command now accepts also multiple key
|
||||
patterns by passing an array of strings. (ISSUE #1).
|
||||
|
||||
* FIX: Replies to the DEL command return the number of elements deleted by
|
||||
* FIX: Replies to the DEL command return the number of elements deleted by
|
||||
the server and not 0 or 1 interpreted as a boolean response. (ISSUE #4).
|
||||
|
||||
v0.5.1 (2010-01-23)
|
||||
@@ -250,7 +250,7 @@ v0.5.1 (2010-01-23)
|
||||
|
||||
* Added missing support for BGREWRITEAOF for Redis >= 1.2.0
|
||||
|
||||
* Implemented a factory method for the RedisServerProfile class to ease the
|
||||
* Implemented a factory method for the RedisServerProfile class to ease the
|
||||
creation of new server profile instances based on a version string.
|
||||
|
||||
v0.5.0 (2010-01-09)
|
||||
|
||||
+29
-29
@@ -19,14 +19,14 @@ For a version compatible with PHP 5.2 you must use the backported version from t
|
||||
|
||||
## Quick examples ##
|
||||
|
||||
See the [official wiki](http://wiki.github.com/nrk/predis) of the project for a more
|
||||
See the [official wiki](http://wiki.github.com/nrk/predis) of the project for a more
|
||||
complete coverage of all the features available in Predis.
|
||||
|
||||
|
||||
### Loading Predis
|
||||
|
||||
Predis relies on the autoloading features of PHP and complies with the
|
||||
[PSR-0 standard](http://groups.google.com/group/php-standards/web/psr-0-final-proposal)
|
||||
Predis relies on the autoloading features of PHP and complies with the
|
||||
[PSR-0 standard](http://groups.google.com/group/php-standards/web/psr-0-final-proposal)
|
||||
for interoperability with most of the major frameworks and libraries.
|
||||
|
||||
When used in a project or script without PSR-0 autoloading, Predis includes its own autoloader for you to use:
|
||||
@@ -41,19 +41,19 @@ Predis\Autoloader::register();
|
||||
// requiring any additional files.
|
||||
```
|
||||
|
||||
You can also create a single [Phar](http://www.php.net/manual/en/intro.phar.php) archive from the repository
|
||||
just by launching the `createPhar.php` script located in the `bin` directory. The generated Phar ships with
|
||||
a stub that defines an autoloader function for Predis, so you just need to require the Phar archive in order
|
||||
You can also create a single [Phar](http://www.php.net/manual/en/intro.phar.php) archive from the repository
|
||||
just by launching the `createPhar.php` script located in the `bin` directory. The generated Phar ships with
|
||||
a stub that defines an autoloader function for Predis, so you just need to require the Phar archive in order
|
||||
to be able to use the library.
|
||||
|
||||
Alternatively you can generate a single PHP file that holds every class, just like older versions of Predis,
|
||||
using the `createSingleFile.php` script located in the `bin` directory. In this way you can load Predis in
|
||||
Alternatively you can generate a single PHP file that holds every class, just like older versions of Predis,
|
||||
using the `createSingleFile.php` script located in the `bin` directory. In this way you can load Predis in
|
||||
your scripts simply by using functions such as `require` and `include`, but this practice is not encouraged.
|
||||
|
||||
|
||||
### Connecting to a local instance of Redis ###
|
||||
|
||||
You don't have to specify a tcp host and port when connecting to Redis instances running on the
|
||||
You don't have to specify a tcp host and port when connecting to Redis instances running on the
|
||||
localhost on the default port:
|
||||
|
||||
``` php
|
||||
@@ -81,9 +81,9 @@ $redis = new Predis\Client(array(
|
||||
|
||||
### Pipelining multiple commands to multiple instances of Redis with client-side sharding ###
|
||||
|
||||
Pipelining helps with performances when there is the need to issue many commands to a server
|
||||
in one go. Furthermore, pipelining works transparently even on aggregated connections. Predis,
|
||||
in fact, supports client-side sharding of data using consistent-hashing on keys and clustered
|
||||
Pipelining helps with performances when there is the need to issue many commands to a server
|
||||
in one go. Furthermore, pipelining works transparently even on aggregated connections. Predis,
|
||||
in fact, supports client-side sharding of data using consistent-hashing on keys and clustered
|
||||
connections are supported natively by the client class.
|
||||
|
||||
``` php
|
||||
@@ -104,8 +104,8 @@ $replies = $redis->pipeline(function($pipe) {
|
||||
|
||||
### Overriding standard connection classes with custom ones ###
|
||||
|
||||
Predis allows developers to create new connection classes to add support for new protocols
|
||||
or override the existing ones to provide a different implementation compared to the default
|
||||
Predis allows developers to create new connection classes to add support for new protocols
|
||||
or override the existing ones to provide a different implementation compared to the default
|
||||
classes. This can be obtained by subclassing the `Predis\Network\IConnectionSingle` interface.
|
||||
|
||||
``` php
|
||||
@@ -120,17 +120,17 @@ Predis\ConnectionFactory::define('tcp', 'MyConnectionClass');
|
||||
```
|
||||
|
||||
|
||||
You can have a look at the `Predis\Network` namespace for some actual code that gives a better
|
||||
You can have a look at the `Predis\Network` namespace for some actual code that gives a better
|
||||
insight about how to create new connection classes.
|
||||
|
||||
|
||||
### Definition and runtime registration of new commands on the client ###
|
||||
|
||||
Let's suppose Redis just added the support for a brand new feature associated
|
||||
with a new command. If you want to start using the above mentioned new feature
|
||||
right away without messing with Predis source code or waiting for it to find
|
||||
its way into a stable Predis release, then you can start off by creating a new
|
||||
class that matches the command type and its behaviour and then bind it to a
|
||||
Let's suppose Redis just added the support for a brand new feature associated
|
||||
with a new command. If you want to start using the above mentioned new feature
|
||||
right away without messing with Predis source code or waiting for it to find
|
||||
its way into a stable Predis release, then you can start off by creating a new
|
||||
class that matches the command type and its behaviour and then bind it to a
|
||||
client instance at runtime. Actually, it is easier done than said:
|
||||
|
||||
``` php
|
||||
@@ -151,19 +151,19 @@ $redis->newcmd();
|
||||
|
||||
## Development ##
|
||||
|
||||
Predis is fully backed up by a test suite which tries to cover all the aspects of the
|
||||
client library and the interaction of every single command with a Redis server. If you
|
||||
want to work on Predis, it is highly recommended that you first run the test suite to
|
||||
Predis is fully backed up by a test suite which tries to cover all the aspects of the
|
||||
client library and the interaction of every single command with a Redis server. If you
|
||||
want to work on Predis, it is highly recommended that you first run the test suite to
|
||||
be sure that everything is OK, and report strange behaviours or bugs.
|
||||
|
||||
When modifying Predis please be sure that no warnings or notices are emitted by PHP
|
||||
by running the interpreter in your development environment with the `error_reporting`
|
||||
When modifying Predis please be sure that no warnings or notices are emitted by PHP
|
||||
by running the interpreter in your development environment with the `error_reporting`
|
||||
variable set to `E_ALL | E_STRICT`.
|
||||
|
||||
The recommended way to contribute to Predis is to fork the project on GitHub, create
|
||||
new topic branches on your newly created repository to fix or add features and then
|
||||
open a new pull request with a description of the applied changes. Obviously, you can
|
||||
use any other Git hosting provider of your preference. Diff patches will be accepted
|
||||
The recommended way to contribute to Predis is to fork the project on GitHub, create
|
||||
new topic branches on your newly created repository to fix or add features and then
|
||||
open a new pull request with a description of the applied changes. Obviously, you can
|
||||
use any other Git hosting provider of your preference. Diff patches will be accepted
|
||||
too, even though they are not the preferred way to contribute to Predis.
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* The internals of Predis\MultiExecContext should be refactored since the code
|
||||
has become a bit too convoluted.
|
||||
|
||||
* Switch to smaller test units and add more granular tests that try to cover
|
||||
* Switch to smaller test units and add more granular tests that try to cover
|
||||
every single class.
|
||||
|
||||
* Documentation! The README is obviously not enought to show how to use Predis
|
||||
|
||||
@@ -14,7 +14,7 @@ require 'SharedConfigurations.php';
|
||||
/*
|
||||
This is a basic example on how to use the Predis\DispatcherLoop class.
|
||||
|
||||
To see this example in action you can just use redis-cli and publish some
|
||||
To see this example in action you can just use redis-cli and publish some
|
||||
messages to the 'events' and 'control' channel, e.g.:
|
||||
|
||||
./redis-cli
|
||||
|
||||
@@ -14,7 +14,7 @@ require 'SharedConfigurations.php';
|
||||
// This is an implementation of an atomic client-side ZPOP using the support for
|
||||
// check-and-set (CAS) operations with MULTI/EXEC transactions, as described in
|
||||
// "WATCH explained" from http://redis.io/topics/transactions
|
||||
//
|
||||
//
|
||||
// First, populate your database with a tiny sample data set:
|
||||
//
|
||||
// ./redis-cli
|
||||
|
||||
@@ -39,7 +39,7 @@ Array
|
||||
[5] => 40
|
||||
[6] => Array
|
||||
(
|
||||
[0] =>
|
||||
[0] =>
|
||||
[1] => 40
|
||||
)
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ class ProcessorChain implements ICommandProcessorChain, \ArrayAccess
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getProcessors()
|
||||
public function getProcessors()
|
||||
{
|
||||
return $this->_processors;
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ class HashRing implements IDistributionStrategy
|
||||
/**
|
||||
* Resets the distributor.
|
||||
*/
|
||||
private function reset()
|
||||
private function reset()
|
||||
{
|
||||
unset(
|
||||
$this->_ring,
|
||||
@@ -216,9 +216,9 @@ class HashRing implements IDistributionStrategy
|
||||
/**
|
||||
* Implements a strategy to deal with wrap-around errors during binary searches.
|
||||
*
|
||||
* @param int $upper
|
||||
* @param int $upper
|
||||
* @param int $lower
|
||||
* @param int $ringKeysCount
|
||||
* @param int $ringKeysCount
|
||||
* @return int
|
||||
*/
|
||||
protected function wrapAroundStrategy($upper, $lower, $ringKeysCount)
|
||||
|
||||
@@ -44,7 +44,7 @@ class PipelineContext
|
||||
/**
|
||||
* Returns a pipeline executor depending on the kind of the underlying
|
||||
* connection and the passed options.
|
||||
*
|
||||
*
|
||||
* @param Client Client instance used by the context.
|
||||
* @param array Options for the context initialization.
|
||||
* @return IPipelineExecutor
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Predis\Protocol;
|
||||
use Predis\CommunicationException;
|
||||
|
||||
/**
|
||||
* Exception class that identifies errors encountered while
|
||||
* Exception class that identifies errors encountered while
|
||||
* handling the Redis wire protocol.
|
||||
*
|
||||
* @author Daniele Alessandri <suppakilla@gmail.com>
|
||||
|
||||
@@ -48,7 +48,7 @@ class ResponseError implements IRedisServerError
|
||||
|
||||
/**
|
||||
* Converts the object to its string representation.
|
||||
*
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
|
||||
@@ -262,7 +262,7 @@ class MultiExecContext
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets a transaction by UNWATCHing the keys that are being WATCHed and
|
||||
* Resets a transaction by UNWATCHing the keys that are being WATCHed and
|
||||
* DISCARDing the pending commands that have been already sent to the server.
|
||||
*
|
||||
* @return MultiExecContext
|
||||
|
||||
@@ -495,7 +495,7 @@ class ClientFeaturesTestSuite extends PHPUnit_Framework_TestCase
|
||||
$client->flushdb();
|
||||
|
||||
RC::testForClientException($this, 'TEST', function() use($client) {
|
||||
$client->pipeline(function($pipe) {
|
||||
$client->pipeline(function($pipe) {
|
||||
$pipe->ping();
|
||||
$pipe->set('foo', 'bar');
|
||||
throw new Predis\ClientException("TEST");
|
||||
|
||||
@@ -21,7 +21,7 @@ class RedisCommandTestSuite extends PHPUnit_Framework_TestCase
|
||||
// TODO: missing test with float values for a few commands
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
{
|
||||
$this->redis = RC::getConnection();
|
||||
$this->redis->flushdb();
|
||||
}
|
||||
@@ -613,7 +613,7 @@ class RedisCommandTestSuite extends PHPUnit_Framework_TestCase
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
array(),
|
||||
array(),
|
||||
$this->redis->lrange('keyDoesNotExist', 0, 1)
|
||||
);
|
||||
|
||||
@@ -1032,7 +1032,7 @@ class RedisCommandTestSuite extends PHPUnit_Framework_TestCase
|
||||
$setB = RC::setAddAndReturn($this->redis, 'setB', array(1, 3, 4, 6, 9, 10));
|
||||
|
||||
$this->assertTrue(RC::sameValuesInArrays(
|
||||
$setA,
|
||||
$setA,
|
||||
$this->redis->sinter('setA')
|
||||
));
|
||||
|
||||
@@ -1423,7 +1423,7 @@ class RedisCommandTestSuite extends PHPUnit_Framework_TestCase
|
||||
$zset = RC::zsetAddAndReturn($this->redis, 'zset', RC::getZSetArray());
|
||||
|
||||
$this->assertEquals(
|
||||
array('a'),
|
||||
array('a'),
|
||||
$this->redis->zrangebyscore('zset', -10, -10)
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user