База растровых изображений Redis для подсчета активных пользователей

Redis
База растровых изображений Redis для подсчета активных пользователей

предисловие

Вы когда-нибудь задумывались, как посчитать количество активных пользователей? Если делать самому, то как?

Подумайте немного, а позже я расскажу, как использовать растровое изображение в 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

Пожалуйста, обратитесь к изображению выше, и мы вместе завершим следующее исследование:
  1. хранится в виде строки, которая может быть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
    

    В заключение:В ПОРЯДКЕ

  2. хранится в виде строки, которая может бытьsettbitИзменить значение?

    Мы можем попробовать изменить значение, соответствующее смещению 7, на 1, в случае успеха символ h должен стать i

    > setbit str 7 1
    (integer) 0
    
    > get str
    "ii"
    

    В заключение:Могу

  3. использовать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 сценария применения:

  1. Подсчитайте количество активных пользователей
  2. Получить время первого заезда и первого незаезда

Я кратко представлю здесь идею, а затем приложуПодсчитайте количество активных пользователейдля справки

Подсчитайте количество активных пользователей

  1. Установите keyName растрового изображения на тот, который необходимо посчитатьПоведение и временные рамки[дата:дата], например:login:2020-3
  2. Сопоставьте пользователя с растровым изображениемoffset, какidсоответствует индексу двоичного массива,idзаint
  3. Войдите и используйте его успешноsetbitбудет соответствоватьoffsetустановить на 1
  4. использоватьbitcountсчитатьПоведение и временные рамкиактивное население, напримерbitcount login:2020-3

Demo: DailyActiveUsers

Получить время первого заезда и первого незаезда

  1. Установите keyName растрового изображения на тот, который необходимо посчитатьПоведение, временные рамки и объект[дата: человек], например:login:2020-3:Tom
  2. сопоставить дату с растровым изображениемoffset, например №1 соответствует индексу 0 бинарного массива, №2 равен 1
  3. Войдите и используйте его успешноsetbitбудет соответствоватьoffsetустановить на 1
  4. использоватьbitposсчитатьПоведение, временные рамки и объектсостояние входа, напримерbitpos login:2020-3:Tom 1

Суммировать

  1. Принципиальной разницы между растровым изображением и строкой нет, отличается только способ работы.
  2. Использование растровых изображений для хранения логических данных может сэкономить много места.
  3. Команда доступа setbit/getbit
  4. Просмотр статистики bitcount/bitpos

В конце концов

Если приведенный выше контент полезен для вас, пожалуйста, помогите мнепоставить лайк👍, творить не просто, спасибо за поддержку!

Если в статье есть ошибки, спасибо за критику!