Spec-Zone.ru › Redis

SRANDMEMBER

SRANDMEMBER
Синтаксис
SRANDMEMBER key [count]
Доступно с версии:
1.0.0
Временная сложность:
Без аргумента count O(1), в противном случае O(N), где N — абсолютное значение переданного count.
Категории ACL:
@read, @set, @slow,

При вызове только с аргументом key, возвращает случайный элемент из множества, хранящегося в key.

Если переданный аргумент count положительный, возвращает массив различных элементов. Длина массива — либо count, либо мощность множества (SCARD), что меньше.

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

Возврат

Ответ в формате Bulk string: без дополнительного аргумента count, команда возвращает Bulk Reply со случайным выбранным элементом или nil, если key не существует.

Ответ в формате массива: при передаче дополнительного аргумента count, команда возвращает массив элементов или пустой массив, если key не существует.

Примеры

SADD myset one two three
SRANDMEMBER myset
SRANDMEMBER myset 2
SRANDMEMBER myset -5

Описание поведения при передаче аргумента count

Когда аргумент count имеет положительное значение, эта команда ведет себя следующим образом:

  • Возвращаются только уникальные элементы.
  • Если count больше мощности множества, команда вернёт только все элементы множества без дополнительных элементов.
  • Порядок элементов в ответе не является истинно случайным, поэтому клиент должен отсортировать их, если это необходимо.

Когда аргумент count имеет отрицательное значение, поведение меняется следующим образом:

  • Возврат повторяющихся элементов возможен.
  • Возвращается ровно count элементов или пустой массив, если множество пусто (ключ не существует).
  • Порядок элементов в ответе — истинно случайный.

Распределение возвращаемых элементов

Примечание: этот раздел актуален только для Redis 5 и ниже, так как Redis 6 реализует более справедливый алгоритм.

Распределение возвращаемых элементов далековато от идеального, когда количество элементов в множестве невелико. Это связано с тем, что мы использовали приближённую функцию выбора случайного элемента, которая не гарантирует хорошего распределения.

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

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

История

  • Начиная с версии Redis 2.6.0: добавлен необязательный аргумент count.

© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/srandmember/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API