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 ... srckeyNBITOP OR destkey srckey1 srckey2 srckey3 ... srckeyNBITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyNBITOP 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/