mirror of
https://github.com/predis/predis.git
synced 2026-08-23 21:49:40 +00:00
62b421f20e
This change reduces some unnecessary complexity in the library, Redis commands do not change much after all. Developers can still implement their own commands factory, inject new commands or override existing ones. The "profile" client options has been renamed to "commands" and it accepts instances of Predis\Command\FactoryInterface. The test suite checks at runtime the version of the running instance of Redis for integration tests to adapt itself automatically.
99 lines
2.7 KiB
PHP
99 lines
2.7 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) Daniele Alessandri <suppakilla@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
require __DIR__.'/shared.php';
|
|
|
|
use Predis\Collection\Iterator;
|
|
|
|
// Starting with Redis 2.8, clients can iterate incrementally over collections
|
|
// without blocking the server like it happens when a command such as KEYS is
|
|
// executed on a Redis instance storing millions of keys. These commands are:
|
|
//
|
|
// - SCAN (iterates over the keyspace)
|
|
// - SSCAN (iterates over members of a set)
|
|
// - ZSCAN (iterates over members and ranks of a sorted set)
|
|
// - HSCAN (iterates over fields and values of an hash).
|
|
|
|
// Predis provides a specialized abstraction for each command based on standard
|
|
// SPL iterators making it possible to easily consume SCAN-based iterations in
|
|
// your PHP code.
|
|
//
|
|
// See http://redis.io/commands/scan for more details.
|
|
//
|
|
|
|
$client = new Predis\Client($single_server);
|
|
|
|
// Prepare some keys for our example
|
|
$client->del('predis:set', 'predis:zset', 'predis:hash');
|
|
for ($i = 0; $i < 5; ++$i) {
|
|
$client->sadd('predis:set', "member:$i");
|
|
$client->zadd('predis:zset', -$i, "member:$i");
|
|
$client->hset('predis:hash', "field:$i", "value:$i");
|
|
}
|
|
|
|
// === Keyspace iterator based on SCAN ===
|
|
echo 'Scan the keyspace matching only our prefixed keys:', PHP_EOL;
|
|
foreach (new Iterator\Keyspace($client, 'predis:*') as $key) {
|
|
echo " - $key", PHP_EOL;
|
|
}
|
|
|
|
/* OUTPUT
|
|
Scan the keyspace matching only our prefixed keys:
|
|
- predis:zset
|
|
- predis:set
|
|
- predis:hash
|
|
*/
|
|
|
|
// === Set iterator based on SSCAN ===
|
|
echo 'Scan members of `predis:set`:', PHP_EOL;
|
|
foreach (new Iterator\SetKey($client, 'predis:set') as $member) {
|
|
echo " - $member", PHP_EOL;
|
|
}
|
|
|
|
/* OUTPUT
|
|
Scan members of `predis:set`:
|
|
- member:1
|
|
- member:4
|
|
- member:0
|
|
- member:3
|
|
- member:2
|
|
*/
|
|
|
|
// === Sorted set iterator based on ZSCAN ===
|
|
echo 'Scan members and ranks of `predis:zset`:', PHP_EOL;
|
|
foreach (new Iterator\SortedSetKey($client, 'predis:zset') as $member => $rank) {
|
|
echo " - $member [rank: $rank]", PHP_EOL;
|
|
}
|
|
|
|
/* OUTPUT
|
|
Scan members and ranks of `predis:zset`:
|
|
- member:4 [rank: -4]
|
|
- member:3 [rank: -3]
|
|
- member:2 [rank: -2]
|
|
- member:1 [rank: -1]
|
|
- member:0 [rank: 0]
|
|
*/
|
|
|
|
// === Hash iterator based on HSCAN ===
|
|
echo 'Scan fields and values of `predis:hash`:', PHP_EOL;
|
|
foreach (new Iterator\HashKey($client, 'predis:hash') as $field => $value) {
|
|
echo " - $field => $value", PHP_EOL;
|
|
}
|
|
|
|
/* OUTPUT
|
|
Scan fields and values of `predis:hash`:
|
|
- field:0 => value:0
|
|
- field:1 => value:1
|
|
- field:2 => value:2
|
|
- field:3 => value:3
|
|
- field:4 => value:4
|
|
*/
|