2015-02-16 7 views
7

Użyłem wcześniej polecenia KEYS, aby wyszukać klucze pasujące do określonego wzorca w mojej bazie danych Redis. Od wersji Redis 2.8 wydaje się, że polecenie SCAN jest preferowane w porównaniu z KEYS, ponieważ zwraca iterator zamiast skanować cały obszar keyspace naraz.Jak używać SCAN z opcją MATCH w Predis

Używam Predis> = 0.8.5, który ma obsługiwać iteratory PHP dla polecenia SCAN. Predis nie mają dużo dokumentacji, więc zastanawiam się, jak przetłumaczyć następujące polecenie KEYS na to SCAN odpowiednik:

$client->keys($pattern) 

Próbowałem następujące:

$client->scan('MATCH', $pattern); 

Jaki rodzaj działa - ale nie zwraca natywnego iteratora PHP. Byłoby miło użyć wbudowanego wsparcia iteratora Predis.

Odpowiedz

15

Znalazłem, jak to zrobić w Predis examples directory.

Aby korzystać SCAN szukać dopasowanie kluczy w bazie danych, po prostu użyć klasy Predis\Collection\Iterator\Keyspace:

use Predis\Collection\Iterator; 

$client = ...; 
$pattern = 'foo*'; 

foreach (new Iterator\Keyspace($client, $pattern) as $key) { 
    ... 
} 

Widocznie Predis ma klasę iterator w Predis\Collection\Iterator dla każdego z poleceń, które zwracają iteratorów:

  • Keyspace dla SCAN
  • HashKey dla HSCAN
  • SetKey dla SSCAN
  • SortedSetKey dla ZSCAN
  • ListKey dla LRANGE - To naprawdę nie wykorzystać iteratory Redis, ale jest to miły interfejs LRANGE tak.
0

Może to jest pomocne dla innych początkujących Predis i idziesz z PHP/MySQL jak ja tła można użyć to:

foreach (new Iterator\HashKey($client, $pattern) as $index => $value) { 
    ... 
} 

Kiedy wcześniej wygenerowany zbiór danych tablicy z $client->hmset($index, $array).

Powiązane problemy