当前位置: 首页 > 知识库问答 >
问题:

Redis(PHP-Redis)扫描和键显示相同模式的不同结果

马华茂
2023-03-14

我在Redis 3.1.6版中使用PHP-Redis

$result = $redis->keys('source_1234_[a-zA-Z]*_[0-9]*');

生产

{array} [6]
 0 = "source_1234_test_1"
 1 = "source_1234_test_2"
 2 = "source_1234_test_3"
 3 = "source_1234_test_4"
 4 = "source_1234_test_5"
 5 = "source_1234_test_6"

然而

$iterator = 0;
$result = $redis->scan($iterator, 'source_1234_[a-zA-Z]*_[0-9]*');
FALSE

共有1个答案

漆雕博
2023-03-14

您的代码有两个问题:

(a)您需要将迭代器设置为null,而不是0

从对scan的调用返回0以指示已扫描所有密钥。因此,它将停止并返回false

(b)scan迭代所有密钥的集合,为每次调用返回每个集合中的匹配项。你只给扫描打了一次电话。它将扫描第一个count键,如果这些键都不匹配,则返回false。

请参阅https://redis.io/commands/scan#number-of-elements-returned-at-every-scan-call:

扫描族函数不保证每次调用返回的元素数在给定范围内。这些命令还允许返回零元素,只要返回的游标不为零,客户端就不应认为迭代完成。[...]

$iterator = NULL
while($iterator != 0) {
    $arr_keys = $redis->scan($iterator, 'source_1234_[a-zA-Z]*_[0-9]*')
    foreach($arr_keys as $str_key) {
        echo $str_key;
    }
}
 类似资料:
  • 问题内容: 我正在尝试与Laravel 一起使用Redis。我可以发出一个返回10个键的请求,但我希望循环直到所有键都返回。我不确定如何使用laravel进行此操作。目前我有 我不知道是否有一种“ laravel”的方式。 编辑: 我使用作曲家进行导入并与之合作 但是我想知道laravel的方式 编辑: var_dump的单 问题答案: 当Redis外观直接将命令传递给Predis(或您可能会说R

  • 我只是设置了一个带有Express服务器的Redis客户机,以便能够在Redis存储中持久保存用户会话数据。出于兴趣,我正在使用命令监视上的请求,以查看通过Express发出的请求。当用户登录时,我在对象上设置了键,请求将显示在CLI上: 但是在存储会话信息之后,和命令显示为记录在CLI上: 我非常肯定我没有通过Express不断调用任何函数,那么为什么命令显示这些请求呢?

  • 我正在尝试找出存储在一个匹配Redis模式的键列表中的值。我尝试使用以便稍后使用获取所有值,但问题是: 返回所需的键。如何强制查看所有现有键?我得去查lua吗?

  • 在Redis中创建键时,我使用“:”格式,并将其与URL结构类似地处理。 但如果该结构本身包含键-值类型组合呢?有人把钥匙放在结构里吗? 虚构示例: 在某些方面,我认为选项A的结构中有力量,但也给关键增加了很多复杂性。 想法?

  • 找不到任何有关redis扫描匹配的信息

  • 问题内容: 我正在尝试使用SCAN http://redis.io/commands/scan来遍历redis中存在的所有键。但是spring提供的Redis模板没有任何scan()方法。有什么技巧可以使用以上内容吗? 谢谢 问题答案: 您可以使用on 来这样做。