BF.ADD
BF.ADD
BF.ADD key item
- Доступно в:
- Redis Stack / Bloom 1.0.0
- Сложность по времени:
- O(k), где k — количество хеш-функций, используемых последним подфильтром
Создаёт пустой 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 битов на элемент.
Параметры:
- ключ: Ключ, по которому находится фильтр
- вероятность_ложноположительных: Желаемая вероятность ложноположительных результатов. Вероятность — десятичное значение от 0 до 1. Например, для желаемой вероятности ложноположительного результата 0,1% (1 из 1000), вероятность_ложноположительных должна быть установлена в 0,001.
-
ёмкость: Количество записей, предполагаемых для добавления в фильтр. Если ваш фильтр позволяет масштабирование, производительность начнёт ухудшаться после добавления большего количества элементов, чем это число. Фактическое ухудшение зависит от того, насколько сильно предел был превышен. Производительность ухудшается линейно с количеством
sub-filters.
Необязательные параметры:
-
НЕМАСШТАБИРУЕМЫЙ: Препятствует созданию дополнительных подфильтров, если достигнута начальная ёмкость. Немасштабируемые фильтры требуют немного меньше памяти, чем их масштабируемые аналоги. Фильтр возвращает ошибку, когда
capacityдостигнуто. -
МАСШТАБИРОВАНИЕ: Когда
capacityдостигнуто, создаётся дополнительный подфильтр. Размер нового подфильтра — размер последнего подфильтра, умноженный наexpansion. Если количество элементов, подлежащих хранению в фильтре, неизвестно, рекомендуется использовать значениеexpansion2 или более, чтобы уменьшить количество подфильтров. В противном случае рекомендуется использовать значениеexpansion1 для уменьшения потребления памяти. Значение масштабирования по умолчанию равно 2.
Возврат
Целочисленный ответ — "1", если такой элемент не существовал в фильтре, "0", если такой элемент, вероятно, был добавлен в фильтр ранее (возможны ложноположительные результаты).
Примеры
redis> BF.ADD bf item1 (integer) 0 redis> BF.ADD bf item_new (integer) 1
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/bf.add/