我之前使用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'非常好。内置迭代器支持。
答案 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
中都有一个迭代器类:
答案 1 :(得分:0)
也许这对其他Predis初学者很有帮助,而且你来自像我这样的PHP / MySQL背景你可以使用它:
foreach (new Iterator\HashKey($client, $pattern) as $index => $value) {
...
}
之前使用$client->hmset($index, $array)
生成数组数据集。