Проблема в том, что когда я при выполнении операции сканирования кажется, что она попадает в бесконечный цикл, что не имеет смысла, поскольку, согласно документации 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}");
ОБНОВЛЕНИЕ
Проверяю интерфейс командной строки, который вижу что он никогда не находит ключ и остается в цикле, даже если я добавляю тот же самый ключ, который вижу в 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>
РЕШЕНО
Проблема заключалась в том, что у нас очень большой количество ключей, поэтому увеличение значения COUNT до большего значения дало правильные результаты.
Подробнее здесь: https://stackoverflow.com/questions/597 ... redis-scan
Мобильная версия