12

我之前使用该KEYS命令在我的 Redis 数据库中搜索与特定模式匹配的键。从 Redis 2.8 开始,该SCAN命令似乎更受欢迎,KEYS因为它返回一个迭代器,而不是一次扫描整个键空间。

我正在使用Predis >= 0.8.5,它应该支持SCAN命令的 PHP 迭代器。Predis 没有很多文档,所以我想知道如何将以下KEYS命令翻译成它的SCAN对应命令:

$client->keys($pattern)

我尝试了以下方法:

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

哪种有效 - 但它不返回原生 PHP 迭代器。使用 Predis 的内置迭代器支持会非常好。

4

2 回答 2

30

我在Predis 示例目录中找到了如何执行此操作。

SCAN用于在数据库中搜索匹配的键,您只需使用Predis\Collection\Iterator\Keyspace该类:

use Predis\Collection\Iterator;

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

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

显然 PredisPredis\Collection\Iterator对每个返回迭代器的命令都有一个迭代器类:

  • Keyspace为了SCAN
  • HashKey为了HSCAN
  • SetKey为了SSCAN
  • SortedSetKey为了ZSCAN
  • ListKeyfor LRANGE- 这并没有真正使用 Redis 迭代器,但LRANGE无论如何它都是一个不错的接口。
于 2015-02-16T16:06:09.897 回答
0

也许这对其他 Predis 初学者有帮助,并且您来自像我这样的 PHP/MySQL 背景,您可以使用它:

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

当您之前使用$client->hmset($index, $array).

于 2017-04-07T16:01:02.537 回答