Spec-Zone.ru › Redis

BF.RESERVE

BF.RESERVE
Синтаксис
BF.RESERVE key error_rate capacity [EXPANSION expansion]
  [NONSCALING]
Доступно в:
Redis Stack / Bloom 1.0.0
Сложность по времени:
O(1)

Создаёт пустой Bloom-фильтр с одним подфильтром для начальной ёмкости, запрошенной и с верхним пределом error_rate. По умолчанию фильтр автоматически масштабируется, создавая дополнительные подфильтры, когда capacity достигнуто. Новый подфильтр создаётся размером предыдущего подфильтра, умноженного на expansion.

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

Количество хеш-функций равно -log(error)/ln(2)^2. Количество битов на элемент равно -log(error)/ln(2) ≈ 1.44.

  • 1% вероятность ложного срабатывания требует 7 хеш-функций и 10.08 битов на элемент.
  • 0.1% вероятность ложного срабатывания требует 10 хеш-функций и 14.4 битов на элемент.
  • 0.01% вероятность ложного срабатывания требует 14 хеш-функций и 20.16 битов на элемент.

Параметры:

  • key: Ключ, под которым находится фильтр
  • error_rate: Желаемая вероятность ложных срабатываний. Вероятность — десятичное значение от 0 до 1. Например, для желаемой вероятности ложного срабатывания 0.1% (1 из 1000), error_rate должен быть установлен в 0.001.
  • capacity: Количество записей, которые предполагается добавить в фильтр. Если ваш фильтр позволяет масштабироваться, производительность начнёт снижаться после добавления большего количества элементов, чем это число. Фактическое снижение зависит от того, насколько предел превышен. Производительность снижается линейно с количеством sub-filters.

Необязательные параметры:

  • NONSCALING: Препятствует созданию дополнительных подфильтров, если начальная ёмкость достигнута. Фильтры без масштабирования требуют немного меньше памяти, чем их аналоги с масштабированием. Фильтр возвращает ошибку, когда capacity достигнуто.
  • EXPANSION: Когда capacity достигнуто, создаётся дополнительный подфильтр. Размер нового подфильтра — размер последнего подфильтра, умноженный на expansion. Если количество элементов, которые необходимо сохранить в фильтре, неизвестно, рекомендуется использовать expansion 2 или больше для уменьшения количества подфильтров. В противном случае рекомендуется использовать expansion 1 для уменьшения потребления памяти. Значение по умолчанию для параметра expansion — 2.

Возвращаемое значение

Простой строковый ответ — OK в случае успешного выполнения или Ответ об ошибке в противном случае.

Примеры

redis> BF.RESERVE bf 0.01 1000
OK
redis> BF.RESERVE bf 0.01 1000
(error) ERR item exists
redis> BF.RESERVE bf_exp 0.01 1000 EXPANSION 2
OK
redis> BF.RESERVE bf_non 0.01 1000 NONSCALING
OK

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

Spec-Zone.ru

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