类似于Java中的位运算,是按位来进行存储的
基于实际场景理解:
我们正常要存一个对象,比如user,如果筛选用户是最快的这时候我们就可以用0101来代表1.比如疫情要统计感染人数:
全中国有14亿人,我们可以使用14亿个0把数据存起来,如果有感染就把0变为1
2.网站后台统计用户信息,分为活跃与不活跃
3.网站用户显示登录状态,登录与未登录
4.用户打卡状态:
如果要在Java中做,就需要设计数据表,存放user的信息与status
但是如果使用redis中的bitmaps,就可以利用
String与bitmaps的配合
set user:1:name xxx user1:status: 0 set user:2:name xxx user2:status: 0使用string存储用户信息,属性status存储位,
但是!还有一种更简单的方式,直接使用Bitmaps位图进行操作,它也是一种数据结构,二进制存储,非0即1
比如存储一个用户一年状态,365天=365bit 1字节=8bit 大概只需要46个字节左右就足够了!
setbit key offset value
offset可以理解为空闲的位置或者Index
##使用bitmap可以记录一周的打卡状态 ##最后我想要知道一周的打卡次数 ##只需要判断它的位是1的,然后统计输出就行 127.0.0.1:6379> setbit sign 0 0 (integer) 0 127.0.0.1:6379> setbit sign 1 1 (integer) 0 127.0.0.1:6379> setbit sign 2 0 (integer) 0 127.0.0.1:6379> setbit sign 3 1 (integer) 0 127.0.0.1:6379> setbit sign 4 0 (integer) 0 127.0.0.1:6379> setbit sign 5 1 (integer) 0 127.0.0.1:6379> setbit sign 6 0 (integer) 0 127.0.0.1:6379>getbit key offset
127.0.0.1:6379> setbit sign 0 0 (integer) 0 127.0.0.1:6379> setbit sign 1 1 (integer) 0 127.0.0.1:6379> setbit sign 2 0 (integer) 0 127.0.0.1:6379> setbit sign 3 1 (integer) 0 127.0.0.1:6379> setbit sign 4 0 (integer) 0 127.0.0.1:6379> setbit sign 5 1 (integer) 0 127.0.0.1:6379> setbit sign 6 0 (integer) 0 ##获取某一天的打卡状态 ##getbit命令 127.0.0.1:6379> getbit sign 1 (integer) 1 127.0.0.1:6379> getbit sign 2 (integer) 0 127.0.0.1:6379> getbit sign 3 (integer) 1 127.0.0.1:6379>bitcount key start end
127.0.0.1:6379> setbit sign 0 0 (integer) 0 127.0.0.1:6379> setbit sign 1 1 (integer) 0 127.0.0.1:6379> setbit sign 2 0 (integer) 0 127.0.0.1:6379> setbit sign 3 1 (integer) 0 127.0.0.1:6379> setbit sign 4 0 (integer) 0 127.0.0.1:6379> setbit sign 5 1 (integer) 0 127.0.0.1:6379> setbit sign 6 0 (integer) 0 127.0.0.1:6379> getbit sign 1 (integer) 1 127.0.0.1:6379> getbit sign 2 (integer) 0 127.0.0.1:6379> getbit sign 3 (integer) 1 ##统计打卡天数 127.0.0.1:6379> bitcount sign 0 -1 (integer) 3 ##统计打卡天数 127.0.0.1:6379> bitcount sign (integer) 3 127.0.0.1:6379>