如何在Predis中使用带有MATCH选项的SCAN

And*_*zlo 10 php redis predis

我之前使用该KEYS命令来搜索与Redis数据库中的某个模式匹配的密钥.从Redis 2.8开始,SCAN命令似乎是首选,KEYS因为它返回迭代器而不是一次扫描整个键空间.

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

$client->keys($pattern)
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

$client->scan('MATCH', $pattern);
Run Code Online (Sandbox Code Playgroud)

哪种工作 - 但它不返回本机PHP迭代器.使用Predis的内置迭代器支持会非常好.

And*_*zlo 25

我在Predis示例目录中找到了如何做到这一点.

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

use Predis\Collection\Iterator;

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

foreach (new Iterator\Keyspace($client, $pattern) as $key) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • Keyspace 对于 SCAN
  • HashKey 对于 HSCAN
  • SetKey 对于 SSCAN
  • SortedSetKey 对于 ZSCAN
  • ListKeyfor LRANGE- 这并不是真正使用Redis迭代器,但LRANGE无论如何它都是一个很好的接口.