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

时间:2015-02-16 16:06:10

标签: php redis predis

我之前使用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'非常好。内置迭代器支持。

2 个答案:

答案 0 :(得分:21)

我在Predis examples directory找到了如何做到这一点。

要使用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的一个很好的接口。

答案 1 :(得分:0)

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

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

之前使用$client->hmset($index, $array)生成数组数据集。