Как использовать SCAN с опцией MATCH в Predis

Я ранее использовал KEYS Команда для поиска ключей, соответствующих определенному шаблону в моей базе данных Redis. Поскольку Redis 2.8, SCAN команда кажется предпочтительнее KEYS так как он возвращает итератор вместо сканирования всего пространства ключей одновременно.

я использую Predis > = 0.8.5, которая должна поддерживать итераторы PHP для SCAN команда. Предис не имеет много документации, поэтому мне интересно, как перевести следующее KEYS Команда это SCAN копия:

$client->keys($pattern)

Я пробовал следующее:

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

Какой тип работает — но он не возвращает нативный PHP-итератор. Было бы неплохо использовать встроенную поддержку Predis итератора.

9

Решение

Я нашел, как это сделать в Каталог примеров Predis.

Использовать SCAN для поиска подходящих ключей в базе данных вы просто используете Predis\Collection\Iterator\Keyspace учебный класс:

use Predis\Collection\Iterator;

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

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

По-видимому, у Predis есть класс итераторов в Predis\Collection\Iterator для каждой из команд, возвращающих итераторы:

  • Keyspace за SCAN
  • HashKey за HSCAN
  • SetKey за SSCAN
  • SortedSetKey за ZSCAN
  • ListKey за LRANGE — Это на самом деле не использует итераторы Redis, но это хороший интерфейс для LRANGE тем не мение.
20

Другие решения

Может быть, это полезно для других новичков в Predis, и вы пришли из PHP / MySQL, как я, вы можете использовать это:

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

Когда вы ранее сгенерировали набор данных массива с $client->hmset($index, $array),

0

По вопросам рекламы [email protected]