Spec-Zone.ru › Redis

BITOP

BITOP
Синтаксис
BITOP <AND | OR | XOR | NOT> destkey key [key ...]
Доступно с версии:
2.6.0
Сложность вычисления:
O(N)
Категории ACL:
@write, @bitmap, @slow,

Выполняет побитовую операцию над несколькими ключами (содержащими строковые значения) и сохраняет результат в целевом ключе.

Команда BITOP поддерживает четыре побитовых операции: И, ИЛИ, Исключающее ИЛИ и НЕ. Таким образом, допустимые способы вызова команды:

  • BITOP AND destkey srckey1 srckey2 srckey3 ... srckeyN
  • BITOP OR destkey srckey1 srckey2 srckey3 ... srckeyN
  • BITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyN
  • BITOP NOT destkey srckey

Как видно, операция НЕ является специальной, так как принимает только один входной ключ, поскольку она выполняет инверсию битов, что имеет смысл только как унарная операция.

Результат операции всегда сохраняется в destkey.

Обработка строк разной длины

Когда выполняется операция над строками разной длины, все строки, короче самой длинной строки в наборе, обрабатываются как если бы они были дополнены нулями до длины самой длинной строки.

То же самое относится к несуществующим ключам, которые рассматриваются как поток нулевых байтов до длины самой длинной строки.

Возврат

Целочисленный ответ

Размер строки, сохранённой в целевом ключе, который равен размеру самой длинной входной строки.

Примеры

SET key1 "foobar"
SET key2 "abcdef"
BITOP AND dest key1 key2
GET dest

Паттерн: метрики в реальном времени с использованием битовых карт

BITOP хорошо дополняет паттерн, описанный в документации команды BITCOUNT. Разные битовые карты могут быть объединены, чтобы получить целевую битовую карту, над которой выполняется операция подсчёта единиц.

См. статью под названием "Быстрые и лёгкие метрики в реальном времени с использованием Redis bitmaps" для интересных примеров использования.

Соображения по производительности

BITOP — это потенциально медленная команда, так как она работает за время O(N). Следует проявлять осторожность при её использовании с длинными входными строками.

Для метрик и статистики в реальном времени с большими входными данными хорошим подходом является использование реплики (с включённым параметром replica-read-only), где побитовые операции выполняются, чтобы избежать блокировки основного экземпляра.

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

Spec-Zone.ru

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