серия статей
Все мы знаем, что 8bit = 1b =кб,bitmap
через наименьшую единицуbit
Чтобы установить 0 или 1, он представляет значение или состояние, соответствующее элементу.
Значение бита равно 0 или 1, то есть максимальное количество информации, которое может хранить бит, равно 2.
Bitmap не является специальной структурой данных, по сути, это двоичная строка, которую также можно рассматривать как массив байтов. Содержимое всего растрового изображения может быть получено и установлено напрямую с помощью обычного get/set, или массив байтов можно рассматривать как «битовый массив» с помощью операций с растровыми изображениями, таких как getbit/setbit.
Преимущества растровых изображений:
- Хранилище основано на наименьшем единичном бите, поэтому оно очень экономит место.
- Временная сложность составляет O (1) при установке и O (n) при чтении, и операция выполняется очень быстро.
- Хранение двоичных данных, очень быстрое при выполнении связанных вычислений
- Легко расширить
Как правило, его можно использовать в следующих случаях:
- Вход пользователя
- Онлайн-статус пользователя
- Статистика активных пользователей
- различные значения состояния
Общие команды
SETBIT
Устанавливает или очищает бит по указанному смещению для строкового значения, хранящегося в ключе.SETBIT key offset value
Параметр смещения должен быть больше или равен 0 и меньше 2^32 (битовое отображение ограничено 512 МБ).
GETBIT
Для строкового значения, хранящегося в ключе, получите бит по указанному смещению.GETBIT key offset
BITCOUNT
Подсчитывает количество битов, установленных в 1 в данной строке.BITCOUNT key
BITPOS
Возвращает позицию первого бита в растровом изображении со значением бита.BITPOS key bit [start] [end]
BITOP
Выполняет побитовую операцию над одним или несколькими строковыми ключами, содержащими двоичные биты, и сохраняет результат в destkey.BITOP operation destkey key [key …]
операция может быть любой из четырех операций И, ИЛИ, НЕ, XORBITOP AND destkey key [key ...]
, который принимает логическое объединение одного или нескольких ключей и сохраняет результат в destkey .
BITFIELD
Bitfield имеет три подинструкции, а именно get/set/incrby, которые могут читать и записывать указанный битовый сегмент, но могут обрабатывать только до 64 последовательных битов.Если это превышает 64 бита, необходимо использовать несколько подинструкций. подинструкции.
Подходит для всех видов статистических приложений
Для записи регистрации пользователя, ежедневного онлайн-статуса и т. д. вы можете установить бит, соответствующий смещению текущего дня или текущего дня в 1, и использоватьBITCOUNT
Заезды легко подсчитываются.
Также есть ситуация, которая используется чаще, то есть для установки различных значений статуса, таких как настройки торгового центра: можно ли оценить заказ, можно ли отображать распроданные товары, является ли значение статуса нормальным. и т. д. могут быть сохранены с использованием растрового изображения.
С точки зрения производительности, как и вышеупомянутая регистрация, даже если она работает в течение 10 лет, занимаемое пространство составляет всего 10 * 365 бит на пользователя, что составляет 456 байт на пользователя. Для данных такого размера ключ BITCOUNT [начало] [конец] выполняется так же быстро, как операции O(1), такие как ключ GET и ключ INCR.
Конечно, если ваши растровые данные очень велики, вы можете рассмотреть возможность использования следующих двух методов:
- Разбейте большое растровое изображение на разные ключи и обрабатывайте его как маленькое растровое изображение. Это легко сделать с помощью Lua-скриптов.
- Используйте начальный и конечный параметры клавиши BITCOUNT [start] [end] для вычисления только требуемой части битов за раз, а затем их накопления.
дальнейшее чтение
Эта статья также опубликована в общедоступной учетной записи WeChat [Trail News]. Пожалуйста, отсканируйте код, чтобы следовать!