Spec-Zone.ru › Redis

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/

Spec-Zone.ru

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