CF.INSERTNX
CF.INSERTNX
CF.INSERTNX key [CAPACITY capacity] [NOCREATE] ITEMS item [item ...]
- Доступно в:
- Redis Stack / Bloom 1.0.0
- Сложность по времени:
- O(n * (k + i)), где n — количество элементов, k — количество подфильтров и i — maxIterations
CF.INSERT
CF.INSERTNX
Примечание: CF.INSERTNX — это расширенная команда, неправильное использование которой может иметь непредвиденные последствия.
CF.INSERT {key} [CAPACITY {capacity}] [NOCREATE] ITEMS {item ...}
CF.INSERTNX {key} [CAPACITY {capacity}] [NOCREATE] ITEMS {item ...}
Описание
Добавляет один или несколько элементов в фильтр Cuckoo, позволяя создать фильтр с пользовательской ёмкостью, если он ещё не существует.
Эта команда эквивалентна команде CF.EXISTS + CF.ADD. Она не вставляет элемент в фильтр, если его отпечаток уже существует, и, таким образом, лучше использует доступную ёмкость. Однако, если вы удаляете элементы, это может привести к появлению ошибки ложноотрицательного значения!
Эти команды предлагают большую гибкость по сравнению с ADD и ADDNX командами, но при этом требуют большей объёмности кода.
Параметры
- key: Имя фильтра
-
capacity: Указывает желаемую ёмкость нового фильтра, если он ещё не существует. Если фильтр уже существует, этот параметр игнорируется. Если фильтр ещё не существует, а этот параметр не указан, то фильтр создаётся с ёмкостью по умолчанию модуля, которая составляет 1024. См.
CF.RESERVEдля получения дополнительной информации о ёмкостях фильтров Cuckoo. -
NOCREATE: Если указано, предотвращает автоматическое создание фильтра, если он не существует. Вместо этого возвращается ошибка, если фильтр не существует. Этот параметр взаимоисключающий с
CAPACITY. -
item: Один или несколько элементов для добавления. Ключевое слово
ITEMSдолжно предшествовать списку добавляемых элементов.
Сложность
O(n + i), где n — количество sub-filters и i — maxIterations. Добавление элементов требует не более 2 обращений к памяти за каждый sub-filter. Но по мере заполнения фильтра оба места для элемента могут оказаться заполненными. Фильтр пытается Cuckoo поменять местами элементы до maxIterations раз.
Возвращаемое значение
Массив булевых значений (как целые числа), соответствующих заданным элементам. Возможные значения для каждого элемента:
-
> 0если элемент был успешно вставлен -
0если элемент уже существовал и используетсяINSERTNX. -
<0если произошла ошибка
Обратите внимание, что для CF.INSERT возвращаемое значение всегда будет массивом >0 значений, если только не произошла ошибка.
Возврат
Массивный ответ целых чисел — где «1» означает, что элемент был добавлен в фильтр, а «0» означает, что элемент уже существовал. Ошибка ответа при ошибочных параметрах фильтра
Примеры
redis> CF.INSERTNX cf CAPACITY 1000 ITEMS item1 item2 1) (integer) 1 2) (integer) 1
redis> CF.INSERTNX cf CAPACITY 1000 ITEMS item1 item2 item3 1) (integer) 0 2) (integer) 0 3) (integer) 1
redis> CF.INSERTNX cf_new CAPACITY 1000 NOCREATE ITEMS item1 item2 (error) ERR not found
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/cf.insertnx/