CF.RESERVE
CF.RESERVE
CF.RESERVE key capacity [BUCKETSIZE bucketsize] [MAXITERATIONS maxiterations] [EXPANSION expansion]
- Доступно в:
- Redis Stack / Bloom 1.0.0
- Временная сложность:
- O(1)
Создаёт фильтр Кука как key с одним подфильтром для начального количества capacity элементов. Из-за работы фильтров Кука, фильтр, вероятно, объявит себя полным до достижения capacity, и поэтому коэффициент заполнения, скорее всего, никогда не достигнет 100%. Коэффициент заполнения можно улучшить, используя больший bucketsize за счёт увеличения ошибки. Когда фильтр сам объявляет себя full, он автоматически расширяется, генерируя дополнительные подфильтры за счёт снижения производительности и увеличения вероятности ошибки. Новый подфильтр создаётся с размером предыдущего подфильтра, умноженным на expansion. Как и размер бакета, дополнительные подфильтры линейно увеличивают вероятность ошибки. Размер нового подфильтра — это размер последнего подфильтра, умноженный на expansion.
Минимальная вероятность ложноположительных результатов составляет 2/255 ≈ 0,78%, когда используется размер бакета 1. Большие бакеты линейно увеличивают вероятность ошибки (например, размер бакета 3 даёт вероятность ошибки 2,35%), но улучшают коэффициент заполнения фильтра.
maxiterations определяет количество попыток найти слот для входящего отпечатка пальца. После того, как фильтр заполнится, высокое значение maxIterations замедлит вставки.
Неиспользуемая ёмкость в предыдущих подфильтрах автоматически используется, когда это возможно. Фильтр может увеличиться до 32 раз.
Параметры:
- key: Ключ, по которому находит фильтр.
-
capacity: Ожидаемая ёмкость фильтра. Емкость округляется до ближайшего
2^nчисла. Фильтр, скорее всего, не заполнится до 100% своей ёмкости. Убедитесь, что вы зарезервировали дополнительную ёмкость, если хотите избежать расширений.
Дополнительные параметры:
- bucketsize: Количество элементов в каждом бакете. Более высокое значение размера бакета улучшает коэффициент заполнения, но также приводит к большей вероятности ошибки и немного замедляет производительность. Значение по умолчанию равно 2.
- maxiterations: Количество попыток поменять местами элементы между бакетами, прежде чем объявить фильтр полным и создать дополнительный фильтр. Низкое значение лучше для производительности, а более высокое значение лучше для коэффициента заполнения фильтра. Значение по умолчанию равно 20.
-
expansion: Когда создаётся новый фильтр, его размер равен размеру текущего фильтра, умноженному на
expansion. Расширение округляется до ближайшего2^nчисла. Значение по умолчанию равно 1.
Возвращаемое значение
Простой строковый ответ - OK в случае успешного выполнения, или Ответ об ошибке в противном случае.
Примеры
redis> CF.RESERVE cf 1000 OK
redis> CF.RESERVE cf 1000 (error) ERR item exists
redis> CF.RESERVE cf_params 1000 BUCKETSIZE 8 MAXITERATIONS 20 EXPANSION 2 OK
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/cf.reserve/