【问题标题】:How to use SCAN with the MATCH option in Predis如何在 Predis 中使用 SCAN 和 MATCH 选项
【发布时间】:2015-04-17 04:58:28
【问题描述】:

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

【问题讨论】:

    标签: php redis predis


    【解决方案1】:

    我在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 中为每个返回迭代器的命令都有一个迭代器类:

    • KeyspaceSCAN
    • HashKeyHSCAN
    • SetKeySSCAN
    • SortedSetKeyZSCAN
    • ListKey for LRANGE - 这并没有真正使用 Redis 迭代器,但无论如何它是 LRANGE 的一个很好的接口。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-23
        • 1970-01-01
        • 2019-05-30
        • 2019-12-14
        • 2021-07-29
        • 1970-01-01
        • 2016-02-23
        相关资源
        最近更新 更多