Почему redis возвращает больше значений вместо count? - PullRequest
0 голосов
/ 03 июля 2019

Я использую Ruby on Rails для хранения ключей в Redis. Под моим хешем находится более 20000 ключей. Я пытался ограничить 10, получая все. Но редис вернул 11 вместо 10. Почему его вернул 11?

Мой хэш,

127.0.0.1:6379> HLEN myhash
(integer) 14148

В следующем примере я запрашиваю 4 записи, но возвращаю 5 с соответствующими значениями,

127.0.0.1:6379> HSCAN my_hash 0 match * count 4
1) "896"
2)  1) "player 1"
    2) "{\"id\":\"13192\",\"name\":\"Ram\"}"
    3) "player 2"
    4) "{\"id\":\"5429\",\"name\":\"Gopal\"}"
    5) "player 3"
    6) "{\"id\":\"2614\",\"name\":\"Venu\"}"
    7) "player 4"
    8) "{\"id\":\"9645\",\"name\":\"Sam\"}"
    9) "player 5"
   10) "{\"id\":\"2358\",\"name\":\"Rohit\"}"

Почему я получаю 5 здесь?

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

отметьте это ответ

В соответствии с document :

" При итерации пространства клавиш или Set, Hashили Sorted Set, который достаточно большой, чтобы быть представленным хеш-таблицей, при условии, что опция MATCH не используется, сервер обычно возвращает count или чуть больше, чем count элементов за вызов . Пожалуйста, проверьте, почему SCAN можетвернуть все элементы сразу в раздел этого документа."

2 голосов
/ 03 июля 2019

задокументированное значение COUNT состоит в том, что это подсказка о том, сколько работы нужно выполнить для вызова HSCAN, это не строгое число возвращаемых элементов.

Хотя SCAN не предоставляет гарантий относительно количества элементов, возвращаемых на каждой итерации, можно эмпирически настроить поведение SCAN с помощью опции COUNT. В основном с COUNT пользователь указывает объем работы, который должен быть выполнен при каждом вызове, чтобы извлечь элементы из коллекции. Это просто подсказка для реализации ....

При итерации пространства ключей или набора, хэша или отсортированного набора, который достаточно велик, чтобы быть представленным в хэш-таблице, при условии, что опция MATCH не используется, сервер обычно возвращает счетчик или немного больше, чем количество элементов за вызов .

...