предисловие
Вы когда-нибудь задумывались, как посчитать количество активных пользователей? Если делать самому, то как?
Подумайте немного, а позже я расскажу, как использовать растровое изображение в Redis для подсчета количества активных пользователей.
текст
Что такое растровое изображение?
битовая картадвоичныйбайтовый массив, также можно просто понимать как обычную строку. Он хранит двоичные данные в массиве байтов для хранения данных.
Рисунок 1.1
Как использовать растровые изображения?
Уточнение понятий
Объясняя, что такое битмап, я сказал, что битмап можно понимать как обычную строку,Так почему же мы используем растровые изображения вместо строк?
Ниже приведена схема хранения строк в Redis.
Рисунок 2.1
Как показано на рисунке, хранение строк заключается в хранении строк в виде двоичных массивов в Redis, а растровые изображения могут напрямую работать с двоичными массивами.Преимущество растровых изображений заключается в том, что 0 и 1 могут использоваться для хранения логических значений, что значительно снижает потребление дискового пространства.. Благодаря этой особенности мыИспользуйте растровые изображения для записи информации о регистрации, регистрации активных пользователей и т. д., можно добиться возможности экономии места (будет представлено позже).
Так как же мы работаем с двоичными массивами?
базовый доступ
setbit | getbit
Для двоичного массива, упомянутого выше, мы можем сделатьДобавить, найти и изменитьфункция
Как добавить и найти?
setbit [keyName] [offset] [value]
offset: смещение, которое относится к нижнему индексу массива; value: данные, которые могут быть только 0 и 1.
Эта команда может как добавлять данные, так и изменять данные.
Как его найти?
getbit [keyName] [offset]
смещение: смещение, которое относится к нижнему индексу массива. Здесь, за исключением смещения, значение которого равно 1, все остальные запросы возвращают 0.
Дополнение: как упоминалось выше, растровые изображения можно понимать как строки, поэтому могут ли они взаимодействовать друг с другом?
Рисунок 2.2
Пожалуйста, обратитесь к изображению выше, и мы вместе завершим следующее исследование:-
хранится в виде строки, которая может быть
getbit
Команда получает значение?Мы можем объединить запрос и смещение, показанное на картинке, и соответствующее значение для проверки.
> set str hi OK > getbit str 0 (integer) 0 > getbit str 4 (integer) 1 > getbit str 7 (integer) 0 > getbit str 15 (integer) 1
В заключение:В ПОРЯДКЕ
-
хранится в виде строки, которая может быть
settbit
Изменить значение?Мы можем попробовать изменить значение, соответствующее смещению 7, на 1, в случае успеха символ h должен стать i
> setbit str 7 1 (integer) 0 > get str "ii"
В заключение:Могу
-
использовать
setbit
Двоичные данные для хранения строк, доступ к которым можно получить черезget
получить строку?Мы сохраняем двоичный код символа h в растровое изображение и видим, что его можно получить с помощью get
> setbit bitmap 0 0 (integer) 0 > setbit bitmap 1 1 (integer) 0 > setbit bitmap 2 1 (integer) 0 > setbit bitmap 3 0 (integer) 0 > setbit bitmap 4 1 (integer) 0 > setbit bitmap 5 0 (integer) 0 > setbit bitmap 6 0 (integer) 0 > setbit bitmap 7 0 (integer) 0 > get bitmap "h"
В заключение:Могу
Основные концепции и использование растровых изображений были представлены выше.Я надеюсь, что благодаря серии исследований я помогу вам лучше понять растровые изображения.
Итак, как применить растровое изображение к проекту?
Статистика и поиск
bitcount | bitpos
bitcount
используется для поиска количества вхождений 1 как для растровых изображений, так и для строк, использование выглядит следующим образом:
bitcount [keyName] [startWith] [endWith]
Примечание: startWith и endWith здесь не являются нижними индексами двоичного массива (смещение)
Здесь startWith и endWith можно понимать как индексы строк, а строка соответствует 8-битным двоичным данным, они эквивалентны перехвату строк, напримерs= "hi"
, s[0:0] = "h"
, индекс соответствующего двоичного массива равен 0, 7 и т. д.
На самом деле тут не так просто объяснить.Давайте сначала приведем код.Вы можете взглянуть на картинку выше 2.2.Вы сможете понять это позже.
> set str hi
> bitcount str 0 0
(integer) 4
> bitcount str 0 1
(integer) 8
> bitcount str
(integer) 8
Примечание. Если startWith и endWith не установлены, полный диапазон по умолчанию
Сценарии применения:Подсчитайте количество активных пользователей
bitpos
Используется для поиска первого вхождения 0 или 1 в указанном диапазоне., использование выглядит следующим образом:
bitpos [keyName] [bit] [start] [end]
бит: 0 или 1 для поиска, начало и конец такие же, как startWith и endWith выше
Сценарии применения:Получить время первого заезда и первого незаезда
Сценарии применения
Вышеупомянутые примерно 2 сценария применения:
- Подсчитайте количество активных пользователей
- Получить время первого заезда и первого незаезда
Я кратко представлю здесь идею, а затем приложуПодсчитайте количество активных пользователейдля справки
Подсчитайте количество активных пользователей
- Установите keyName растрового изображения на тот, который необходимо посчитатьПоведение и временные рамки[дата:дата], например:
login:2020-3
- Сопоставьте пользователя с растровым изображением
offset
, какid
соответствует индексу двоичного массива,id
заint
- Войдите и используйте его успешно
setbit
будет соответствоватьoffset
установить на 1 - использовать
bitcount
считатьПоведение и временные рамкиактивное население, напримерbitcount login:2020-3
Demo: DailyActiveUsers
Получить время первого заезда и первого незаезда
- Установите keyName растрового изображения на тот, который необходимо посчитатьПоведение, временные рамки и объект[дата: человек], например:
login:2020-3:Tom
- сопоставить дату с растровым изображением
offset
, например №1 соответствует индексу 0 бинарного массива, №2 равен 1 - Войдите и используйте его успешно
setbit
будет соответствоватьoffset
установить на 1 - использовать
bitpos
считатьПоведение, временные рамки и объектсостояние входа, напримерbitpos login:2020-3:Tom 1
Суммировать
- Принципиальной разницы между растровым изображением и строкой нет, отличается только способ работы.
- Использование растровых изображений для хранения логических данных может сэкономить много места.
- Команда доступа setbit/getbit
- Просмотр статистики bitcount/bitpos
В конце концов
Если приведенный выше контент полезен для вас, пожалуйста, помогите мнепоставить лайк👍, творить не просто, спасибо за поддержку!
Если в статье есть ошибки, спасибо за критику!