一尘不染

如何在Predis中将SCAN与MATCH选项一起使用

redis

我以前曾使用该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的内置迭代器支持真的很好。


阅读 500

收藏
2020-06-20

共1个答案

一尘不染

我在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无论如何它都是一个不错的接口。
2020-06-20