【发布时间】:2020-01-15 15:45:10
【问题描述】:
我正在尝试替换 predis 中的 keys 函数进行扫描,以提高我们所做的某些解析的性能。
问题是,当我执行扫描操作时,它似乎陷入了一个无限循环,这是没有意义的,因为根据 redis 文档,扫描完成后会将迭代器返回为 0。
$it = null;
$keysFound = [];
do {
$redisKeys = $redis->scan($it,"*{$query}", 10);
if (!empty($keys)) {
array_merge($keysFound, $redisKeys);
}
} while($it != 0);
我只是想替换它,所以我们不这样做
$keys = $redis->keys("*{$query}");
我都试过了,请大家帮忙。
更新 检查 cli 我发现它永远找不到密钥并保持循环,即使我放置了与 redsmin 中可以看到的完全相同的密钥。
127.0.0.1:6379> scan 122880 MATCH x_dashboard_dashboard_row_1005_251
1) "118784"
2) (empty list or set)
127.0.0.1:6379> scan 118784 MATCH x_dashboard_dashboard_row_1005_251
1) "18432"
2) (empty list or set)
127.0.0.1:6379> scan 18432 MATCH x_dashboard_dashboard_row_1005_251
1) "59392"
2) (empty list or set)
127.0.0.1:6379> scan 59392 MATCH x_dashboard_dashboard_row_1005_251
1) "63488"
2) (empty list or set)
127.0.0.1:6379> scan 63488 MATCH x_dashboard_dashboard_row_1005_251
1) "123904"
2) (empty list or set)
127.0.0.1:6379> scan 123904 MATCH x_dashboard_dashboard_row_1005_251
1) "19456"
2) (empty list or set)
127.0.0.1:6379> scan 19456 MATCH x_dashboard_dashboard_row_1005_251
1) "121856"
2) (empty list or set)
127.0.0.1:6379> scan 121856 MATCH x_dashboard_dashboard_row_1005_251
1) "115200"
2) (empty list or set)
127.0.0.1:6379> scan 115200 MATCH x_dashboard_dashboard_row_1005_251
1) "119296"
2) (empty list or set)
127.0.0.1:6379> scan 119296 MATCH x_dashboard_dashboard_row_1005_251
1) "109056"
2) (empty list or set)
127.0.0.1:6379>
有没有可能被错误配置的东西?我以前从未使用过 redis,所以我不知道它是否可能与配置错误有关。
已解决 问题是我们有大量的键,因此将 COUNT 值增加到更大的数量会得到正确的结果。
【问题讨论】: