Commit Graph

1528 Commits

Author SHA1 Message Date
Daniele Alessandri 356f22a062 Implement PING in PUB/SUB loop abstraction for Redis 3.0.0. 2014-07-17 12:16:54 +02:00
Daniele Alessandri 823f615699 Update CHANGELOG.
[ci skip]
2014-07-16 19:11:58 +02:00
Daniele Alessandri 7e58ded8dc Update CHANGELOG.
[ci skip]
2014-07-16 14:10:07 +02:00
Daniele Alessandri 2969982a4f Update README.
[ci skip]
2014-07-16 13:06:25 +02:00
Daniele Alessandri 88da187344 Add dedicated server profile for Redis 3.0. 2014-07-16 12:59:48 +02:00
Daniele Alessandri a33781e58c Merge branch 'v1.0/psr-4'
This merge closes #168.

Conflicts:
	src/Command/KeyKeysV12x.php
	src/Profile/RedisVersion120.php
2014-07-16 12:56:27 +02:00
Daniele Alessandri a074cdb79b Update CHANGELOG.
[ci skip]
2014-07-16 11:42:01 +02:00
Daniele Alessandri 63992a0a6e Remove parsing of allocation stats from responses to INFO.
The allocation stats section was most likely something available in
betas of some older release of Redis, it is not even reported on the
official documentation.
2014-07-16 11:21:12 +02:00
Daniele Alessandri ca4ec79575 Fix bug when checking for support for the UNWATCH command. 2014-07-16 11:17:21 +02:00
Daniele Alessandri 2e0c55ac57 Remove support for Redis 1.2.
Actually we have just removed the server profile so nothing stops you
from reimplementing it, but Redis 2.0 has been released 4 years ago so
we are speaking of ancient releases that should probably not even be
used anymore.
2014-07-16 11:14:36 +02:00
Daniele Alessandri 9edc11dc8e Switch to CLUSTER SLOTS instead of CLUSTER NODES for redis-cluster.
CLUSTER SLOTS returns a structured response easier to handle compared
to the bulk response of CLUSTER NODES which must be parsed making the
whole thing more fragile.

CLUSTER SLOTS has been added in Redis 3.0.0b7.
2014-07-15 18:52:09 +02:00
Daniele Alessandri 50334ed3f4 Update CHANGELOG.
[ci skip]
2014-07-15 12:39:46 +02:00
Daniele Alessandri 1319574b4e Rewrite pear packager script.
We still use Onion's package.ini for the configuration of the package
to keep things simple, but we might switch to a more compact solution
in the future since we do not really need much of its features.
2014-07-14 18:10:07 +02:00
Daniele Alessandri 029822fe22 Move source files from "lib/" to "src/". 2014-07-14 18:04:18 +02:00
Daniele Alessandri d226923484 Migrate from PSR-0 to PSR-4. 2014-07-14 18:02:42 +02:00
Daniele Alessandri 959734cf8c Porperly handle -ERR instead of +QUEUED inside MULTI ... EXEC.
Error responses such as -OOM or -ERR on invalid arguments in commands
are returned immediatly instead of +QUEUED when using a transaction,
which is a condition that had not been tested enough. This condition
led to a bug in which Predis was not invalidating the transaction, so
when trying to create a new transaction Redis returned a "-ERR MULTI
calls can not be nested".

This commit fixes #187.
2014-07-14 16:28:29 +02:00
Daniele Alessandri dd29068845 Merge branch 'github/pr/188' 2014-07-14 11:35:07 +02:00
Daniele Alessandri 36a04e84d7 Update CHANGELOG. 2014-07-14 11:34:50 +02:00
Ian Babrou 5b4a7970bb returning associative array from zrange command family 2014-07-14 13:16:26 +04:00
Ian Babrou 235427950f prevent uncaught broken pipe error 2014-07-07 11:50:37 +02:00
Daniele Alessandri 45da0fca55 Merge branch 'github/pr/182' 2014-07-07 10:52:58 +02:00
Daniele Alessandri 2d53db7b9b Rework PR to use "goto" instead of a "while ... do" loop. 2014-07-07 10:50:17 +02:00
Gwilym Evans f05cb1b46d use a loop instead of recursion in CursorBasedIterator
servers with large sets of keys will cause memory and stack exhaustion if recursion is used
2014-06-26 12:56:00 +10:00
Daniele Alessandri 4db00173f3 Use stream_socket_recvfrom() in PhpiredisStreamConnection.
Similarly to the socket-ext based connection using phpiredis, in our
stream based PhpiredisStreamConnection class we should read data from
the stream using stream_socket_recvfrom() instead of fread() because
the latter could block until a timeout is reached when the read buffer
contains less data then the specified length.

IMPORTANT: stream_socket_recvfrom() bypasses stream wrappers which
means that TLS/SSL, as requested by PR #158, won't ever work with
this connection class as the function returns the original encrypted
bytes.

This commit fixes issue #180.
2014-06-23 14:31:02 +02:00
Daniele Alessandri a2265b12b3 Remove implementation of Predis\Command\RawCommand::__toString().
See #151 and message of commit 5c5dd40, forgot to apply the same
change to the Predis\Command\RawCommand class.
2014-06-12 11:57:54 +02:00
Daniele Alessandri 0cd56406fe Just rename a couple of local variables. 2014-06-10 10:56:33 +02:00
Daniele Alessandri e575c32cb4 Rename RedisCluster::askClusterNodes() to askSlotsMap().
This is more consistent with the actual purpose of this method and
more in-line with a possible future change in the underlying command
used to retrieve the slots map if redis-cluster will implement the
CLUSTER SLOTS command.
2014-06-10 10:36:17 +02:00
Daniele Alessandri 42f237e306 [tests] Use annotations to specify expected Redis server version.
This change targets only method annotations and aims to make the body
of tests more readable using the @requiresRedisVersion annotation.

Tests using this annotation requires to be assigned the "connected"
group of tests because they create a connection to the Redis instance
specified in phpunit.xml to fetch its the version.

This is a quick example of how this annotation can be used:

    /**
     * @group connected
     * @requiresRedisVersion >= 2.8.9
     */
    public function testExecutedOnlyWithMatchingRedisVersion()
    {
    }

Future improvements (currently not needed) include:

  * Same annotation working on a class-level (but still applied only
    to test methods with an explicitly assigned @group connected).

  * Ability to specify a version range.

Meh

Meh
2014-06-09 17:31:18 +02:00
Daniele Alessandri 940326e5bd New command: ZREMRANGEBYLEX (Redis 2.8.9). 2014-06-09 15:35:28 +02:00
Daniele Alessandri ea32f74512 New command: ZRANGEBYLEX (Redis 2.8.9). 2014-06-09 15:26:17 +02:00
Daniele Alessandri 8dbac3dd73 New command: ZLEXCOUNT (Redis 2.8.9). 2014-06-09 15:17:36 +02:00
Daniele Alessandri 5a474c5a32 Rename alias used in Predis\Client for Predis\Transaction\MultiExec. 2014-06-03 18:56:48 +02:00
Daniele Alessandri 0148743a76 Fix parsing of the output of CLUSTER NODES to fetch slots map.
There was an error in presence of slaves in the cluster configuration,
see #165 for reference.
2014-06-03 16:24:27 +02:00
Daniele Alessandri 5c935d97bd Merge branch 'v1.0.0-dev/connection-namespace' 2014-06-03 15:45:57 +02:00
Daniele Alessandri 1fd113c570 Rename ComposableProtocolProcessor to CompositeProtocolProcessor. 2014-06-03 15:45:40 +02:00
Daniele Alessandri abd284c972 Complete reorganization of the Predis\Connection namespace.
* Renamed SingleConnectionInterface to NodeConnectionInterface since
  this name is better and makes even more sense in the context of
  cluster and replication scenarios.

* Moved specialized aggregate connections (the ones implementing both
  predis and redis cluster and master/slave replication) in a newly
  created Predis\Connection\Aggregate sub-namespace.

* Removed the "Connection" part from names of aggregate connection
  interfaces in the Predis\Connection\Aggregate sub-namespace.

* Changed "Composable" to "Composite" in the name of interfaces and
  classes that can use pluggable protocol processors.
2014-06-03 15:19:32 +02:00
Daniele Alessandri ff2e0823ec Merge remote-tracking branch 'github/pr/174' 2014-05-30 12:32:40 +02:00
Graham Campbell a6c6951bf8 Added 1.0 branch alias
Let's allow people to install predis using "1.0.x@dev", "~1.0@dev", or any other valid version constraint rather than typing "dev-master" which is really horrible.
2014-05-30 11:24:39 +01:00
Daniele Alessandri 87417f4d7e Skip integration tests for HyperLogLog commands on Redis < 2.8.9.
Caught this by running the test suite on TravisCI which still runs an
older version of Redis 2.8. We should find a more decent way to handle
differences in profiles when commands get added between patch releases
of Redis, our custom skip method will do for now.
2014-05-30 12:19:05 +02:00
Daniele Alessandri 2aa0b071fc New commands: PFADD, PFCOUNT, PFMERGE (Redis 2.8.9).
Many thanks to @rubensayshi for his initial commits on this in #163,
but I had to start from scratch for the master branch first.
2014-05-30 11:32:39 +02:00
Alexey Kupershtokh f784dfad84 Enable INCRBYFLOAT in cluster mode 2014-05-28 13:00:24 +02:00
Daniele Alessandri 10c2f321ff Merge branch 'pr170-master' 2014-05-28 12:54:16 +02:00
thbourlove 7da3da776f use phpunit 4.x instead of 3.x 2014-05-28 12:54:04 +02:00
thbourlove 90cb71ac4a isntall requirement with a better way 2014-05-28 12:53:58 +02:00
thbourlove 2d4383c891 add phpunit as dev requirement 2014-05-28 12:53:50 +02:00
Daniele Alessandri 8ea76f79c7 Minor rewording in CHANGELOG. 2014-03-25 15:33:27 +01:00
Daniele Alessandri 5c5dd40527 Remove implementation of Predis\Command\Command::__toString().
Issue #151 pointed to a flaw in how command instances were converted
to strings: we were simply truncating their arguments when exceeding
a certain size as this was mostly intended for logging or debugging,
but this approach breaks strings containing multibyte characters so
we decided to drop this feature altogether for the sake of simplicity.

It is still possible to replicate the same (and eventually improved)
behavior externally by fetching ID and arguments of a command out of
a command instance using the public methods made available by the
Predis\Command\CommandInterface.
2014-03-25 15:32:20 +01:00
Daniele Alessandri 4638e05865 Tweak sentence in CHANGELOG.
[ci skip]
2014-03-25 15:05:37 +01:00
Daniele Alessandri 4784291640 Failures for PHP 5.6 on Travis CI are not allowed anymore. 2014-03-25 14:49:49 +01:00
Daniele Alessandri a51ff2d6e5 Port #156 to the current master branch.
This fix the parsing of responses to INFO when the node is configured
to work with redis-sentinel.
2014-03-25 14:49:25 +01:00