Що таке Bitmap?
Bitmap у Redis - це спосіб зберігати й обробляти послідовності бітів (0 і 1) поверх звичайного рядка (String). Фактично, це не окремий тип даних, а набір бітових операцій над Redis String, що дозволяє використовувати її як бітову карту.
Основна ідея
Redis String можна розглядати як масив бітів довжиною до 512 МБ
→ це до 4 мільярдів бітів (4×10⁹ булевих значень).
Кожен біт можна встановити (1) чи скинути (0), а потім читати чи підраховувати їхню кількість.
Приклад
SETBIT userlogins 5 1
GETBIT userlogins 5Результат:
1П'ятий біт встановлений у 1.
Основні команди
| Команда | Опис |
|---|---|
SETBIT key offset value | встановити значення біта (0 чи 1) |
GETBIT key offset | отримати значення біта |
BITCOUNT key [start end] | підрахувати кількість встановлених бітів (1) |
BITOP operation destkey key [key ...] | побітові операції (AND, OR, XOR, NOT) |
BITPOS key bit [start end] | знайти перший біт із вказаним значенням |
Приклад підрахунку
SETBIT active_users 1 1
SETBIT active_users 5 1
SETBIT active_users 7 1
BITCOUNT active_usersРезультат:
3Три біти встановлені у 1.
Побітові операції
BITOP AND result key1 key2
BITOP OR result key1 key2
BITOP XOR result key1 key2
BITOP NOT result keyДозволяють робити перетини чи об'єднання кількох bitmap'ів.
Внутрішня будова
Bitmap - це звичайний Redis String, де кожен байт складається з 8 бітів. Redis не виділяє пам'ять заздалегідь: якщо встановити біт з великим зміщенням, решта заповнюється нулями.
Застосування
- Відстеження активності користувачів за днями (1 - активний, 0 - ні).
- Підрахунок унікальних відвідувань.
- Зберігання булевих прапорців (виконав/не виконав дію).
- Прості системи аналітики й статистики.
- Компресія бінарних даних чи ознак.
Приклад відстеження активності
SETBIT logins:2025-10-21 12345 1
GETBIT logins:2025-10-21 12345
BITCOUNT logins:2025-10-21Користувач з ID 12345 позначений як активний за день, і можна миттєво дізнатися загальну кількість активних.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.