Commit Graph

1234 Commits

Author SHA1 Message Date
Daniele Alessandri e88938cdfd Implement PHP iterator based on the HSCAN command (Redis 2.8).
This iterator allows to perform full iterations over fields and values of a
hash by wrapping the incremental nature of HSCAN just like we did for SCAN:

  $client = new Predis\Client('tcp://127.0.0.1', ['profile' => '2.8']);
  $iterator = new Predis\Iterator\Scan\HashIterator($client, "hash_key");

  foreach ($iterator as $field => $value) {
      echo "$field => $value" . PHP_EOL;
  }

Being HSCAN closely related to SCAN, it is subject to the same behaviour,
see http://redis.io/commands/scan for reference.
2013-11-03 14:19:12 +01:00
Daniele Alessandri 93ae376618 Implement PHP iterator based on the ZSCAN command (Redis 2.8).
This iterator allows to perform full iterations over the members of a sorted
set by wrapping the incremental nature of ZSCAN just like we did for SCAN:

  $client = new Predis\Client('tcp://127.0.0.1', ['profile' => '2.8']);
  $iterator = new Predis\Iterator\Scan\SortedSetIterator($client, "zset_key");

  foreach ($iterator as $member => $rank) {
      echo "$rank => $member" . PHP_EOL;
  }

Being ZSCAN closely related to SCAN, it is subject to the same behaviour,
see http://redis.io/commands/scan for reference.

This iterator implementation returns the member as key and the rank as value
since the rank is a float value which would be truncated when transforming
the iteration to an array (e.g. using iterator_to_array()). Luckily PHP
preserves the insertion order for named arrays members still result sorted.
2013-11-03 14:19:07 +01:00
Daniele Alessandri 7028082b7f Implement PHP iterator based on the SSCAN command (Redis 2.8).
This iterator allows to perform full iterations over the members of a set
by wrapping the incremental nature of SSCAN just like we did for SCAN:

  $client = new Predis\Client('tcp://127.0.0.1', ['profile' => '2.8']);
  $iterator = new Predis\Iterator\Scan\SetIterator($client, "set_key");

  foreach ($iterator as $member) {
      echo $member . PHP_EOL;
  }

Being SSCAN closely related to SCAN, it is subject to the same behaviour,
see http://redis.io/commands/scan for reference.

Meh
2013-11-03 14:19:06 +01:00
Daniele Alessandri d09d8edc7d Extract base class for iterators based on the SCAN family of commands.
The iterators based on SCAN, SSCAN, ZSCAN and HSCAN will extend this abstract
class to share most of the logic which is common for all of the Redis commands
in the SCAN family.
2013-11-03 14:19:02 +01:00
Daniele Alessandri 70e42f8fca Implement PHP iterator based on the SCAN command (Redis 2.8).
This iterator allows to perform full iterations over the keyspace of a Redis
instance by wrapping the incremental nature of SCAN using an abstraction that
fits perfectly in userland code:

  $client = new Predis\Client('tcp://127.0.0.1', ['profile' => '2.8']);
  $iterator = new Predis\Iterator\Scan\KeyspaceIterator($client);

  foreach ($iterator as $key) {
      echo $key . PHP_EOL;
  }

Memory consumption during an iteration is limited because elements are fetched
incrementally, on the other hand SCAN gives limited guarantees about returned
elements since the underlying collection (the keyspace in this case) can change
during the whole iteration process. The most immediate drawback is that the same
element may be returned multiple times.

See http://redis.io/commands/scan to fully understand the inner workings,
and particularly the "Scan guarantees" paragraph.
2013-11-03 14:06:50 +01:00
Daniele Alessandri 695b6dd7b3 Update README. 2013-11-02 18:52:43 +01:00
Daniele Alessandri 6ce09a2a8b [tests] Handle failing test on OS X. 2013-11-02 18:50:24 +01:00
Daniele Alessandri bb03602326 Update CHANGELOG. 2013-11-02 18:19:32 +01:00
Daniele Alessandri 5c9adbacd7 [tests] Minor tweaks, no actual changes. 2013-11-02 18:19:32 +01:00
Daniele Alessandri 8533dbdb0b Deprecate Client::pubSub() in favor of Client::pubSubLoop().
Client::pubSub() still works like usual by returning a new pub/sub
context, but it is now considered an alias of Client::pubSubLoop().

This change is necessary in preparation for the next major version
of Predis where Client::pubSub() will be used for the new PUBSUB
command introduced in Redis 2.8.
2013-11-02 18:19:32 +01:00
Daniele Alessandri d78e1b6ab7 New command: HSCAN (Redis 2.8).
One test is currently marked as skipped because it makes
Redis crash when the specified MATCH pattern returns one
or more elements.

See http://redis.io/commands/scan for reference.
2013-11-02 18:19:32 +01:00
Daniele Alessandri d5aec78086 New command: ZSCAN (Redis 2.8).
One test is currently marked as skipped because it makes
Redis crash when the specified MATCH pattern returns one
or more elements.

See http://redis.io/commands/scan for reference.
2013-11-02 18:19:32 +01:00
Daniele Alessandri 0faae20737 New command: SSCAN (Redis 2.8).
See http://redis.io/commands/scan for reference.
2013-11-02 18:19:32 +01:00
Daniele Alessandri 4eb4960b63 New command: SCAN (Redis 2.8).
See http://redis.io/commands/scan for reference.
2013-11-02 18:19:32 +01:00
Daniele Alessandri 75c64b7f2f Add link to CONFIG REWRITE (Redis 2.8) in phpdoc for CONFIG command. 2013-11-02 18:19:32 +01:00
Daniele Alessandri d78780382a Promote Redis 2.8 to a standalone server profile.
We still need to populate this new server profile with the
recently added new commands for Redis 2.8.

The next development version has been set to Redis 3.0.
2013-11-02 18:19:32 +01:00
Daniele Alessandri 98aacd8d9a Back to development for the next patch release. 2013-11-02 18:19:31 +01:00
toretto 4824af1563 Added "Latest Stable Version" and "Total Downloads" Badges 2013-08-31 10:51:10 +02:00
Daniele Alessandri cb18d67b6a Update CHANGELOG and bump VERSION. v0.8.4 2013-07-27 11:13:54 +02:00
Daniele Alessandri 4576dc029f Add LICENSE and phpunit.xml.dist in package.ini for Pear.
This commit addresses issues #124 and #126. LICENSE will be installed
with the "doc" role while phpunit.xml.dist will be installed with the
"test" role.

[ci skip]
2013-06-17 11:16:07 +02:00
Daniele Alessandri aa458a1922 Merge pull request #123 from drealecs/doctype_fixes
some PHPDoc fixes in lib
2013-06-03 03:04:10 -07:00
Alexandru Patranescu 2d2930d24f some PHPDoc fixes in lib
and removed some unused imports also
2013-06-03 00:06:41 +03:00
Daniele Alessandri 7e0ec1a265 Update CHANGELOG.
[ci skip]
2013-05-31 11:52:47 +02:00
Daniele Alessandri 04e597ebba Merge remote-tracking branch 'origin/pr/116' into v0.8 2013-05-31 11:30:30 +02:00
Daniele Alessandri d681bff4ab Merge branch 'github/pr/114' into v0.8 2013-05-31 10:47:58 +02:00
Daniele Alessandri 3dea41aa66 Add tests for prefixed Predis\PubSub\DispatcherLoop. 2013-05-31 10:39:46 +02:00
Daniele Alessandri 69c66e157f Make callbacks properties protected in the DispatcherLoop class.
This makes easier to extend the class. The underlying pub/sub iterator
property is still private, but can be accessed via public getter method.
2013-05-31 10:21:21 +02:00
Daniele Alessandri dd50cfe47e Slightly rework original pull request. 2013-05-31 10:17:54 +02:00
Daniele Alessandri 8451146d38 Expose underlying client object from pub/sub iterators. 2013-05-31 10:17:08 +02:00
Thomas Orozco d45ce35923 Use a random IP when a host has several IPs.
Using gethostbyname, we will reuse the same (first) IP address for
each request. Here, we choose the IP we use randomly.

This is practical in a case where we have multiple redis read-only
slaves that can't invidually support the full application load, but are
accessible through a single hostname.
2013-05-11 14:08:51 -07:00
Eloi Poch 6cd124cc59 Fix DispatcherLoop error with client prefix keys
DispatcherLoop works properly if a client have configured a
prefix for the keys or not
2013-04-20 13:02:17 +02:00
Daniele Alessandri d6fa4a3292 Augment exception message with basic server details on connection error.
Providing a basic hint in the exception message about the server that caused
a connection exception could be useful especially with aggregated connections.

This is in response to issue #110.
2013-03-30 16:16:13 +01:00
Daniele Alessandri 5b771704d3 Handle DUMP and RESTORE with Predis\Connection\PredisCluster. 2013-03-30 14:38:49 +01:00
Daniele Alessandri 68d972a1b1 Merge remote-tracking branch 'origin/pr/111' into v0.8 2013-03-27 15:11:00 +01:00
marcosQuesada 4bf035918d setting medium timeout on slow tests 2013-03-23 00:57:36 +01:00
Daniele Alessandri 94c4e2ffee Fix handling of scripted commands with redis-cluster hash strategy.
A missing "use" directive was preventing the hash strategy to properly
use the specific methods of Predis\Command\ScriptedCommand, falling back
to analyzing the raw arguments array of the command.
2013-03-16 16:24:59 +01:00
Daniele Alessandri 6e2fd181f1 Make sure key prefixing is skipped when command has no arguments.
Actually this was already the case for certain commands, but some of them
was left unguarded for such cases. This commit also fixes #109.

The behaviour of silently skipping key prefixing when a command has no
arguments may change in the future so we added explicit tests as guards
for future changes. Predis\Command\Processor\KeyPrefixProcessor will
continue to skip key prefixing on empty arguments, regardless.
2013-03-16 16:00:33 +01:00
Daniele Alessandri 1c21fcc5b3 Fix strict warnings running command test generator script. 2013-03-16 13:23:46 +01:00
Daniele Alessandri 531261b0fc Add DUMP and RESTORE to the server profile for Redis 2.6.
Closes issue #108.
2013-03-16 13:21:24 +01:00
Daniele Alessandri 7434a9bd0e Add the WITHSCORES modifier only when option value is true.
Fixes issue #107.
2013-03-16 12:37:00 +01:00
Daniele Alessandri c4123ce7ce Update CHANGELOG. 2013-03-16 12:16:52 +01:00
Daniele Alessandri 536992e277 Merge remote-tracking branch 'nitper/cluster_hmset' into v0.8 2013-03-16 12:11:44 +01:00
Daniele Alessandri 5a735aa670 Back to development for the next patch release. 2013-03-16 12:11:37 +01:00
nitper 15f2776d77 update cluster tests 2013-03-11 23:08:10 +00:00
nitper dc1103582e allow HMSET in clusters 2013-03-11 22:50:03 +00:00
Daniele Alessandri 8c0498a893 Bump VERSION and update CHANGELOG. v0.8.3 2013-02-18 15:03:45 +01:00
Daniele Alessandri aba24d0f6f Remove a few more unnecessary strict comparisons. 2013-02-17 20:46:31 +01:00
Daniele Alessandri a1df4f20da Expose private method used to parse URI strings.
This is useful for 3rd party libraries such as PredisServiceProvider
so it makes sense to have it public and static.
2013-02-17 20:38:46 +01:00
Daniele Alessandri 116eaba75e Deprecate the whole Predis\Helpers class. 2013-02-17 15:21:01 +01:00
Daniele Alessandri de4bae3f9b Prevent E_NOTICE messages on __destruct() if $parameters is not set.
This can only happen when throwing on invalid connection parameters,
this is a quick fix that will do for now.
2013-02-17 15:21:01 +01:00