Bitmaps的介绍
- 现代计算机使用二进制位作为信息存储的基本单元。一个字节(Byte)等于8个二进制位(bit)。合理的使用位能有效提高内存使用率和开发效率。
- 位是最小信息单位,可以表示两个状态之一。
- 字节是更大的单位,用多个位组成,在计算机中数据以字节为单位进行存储和访问。
- Redis提供了Bitmaps这种,虽然本质上也是字符串,但是他却可以对字符串进行位的操作。
- Bitmaps单独提供了一套命令,有区别于使用字符串String的命令。
- 可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。
关于Bitmaps在Redis中的操作指令
- setbit设置值
- setbit key offset value(设置键的第offset个位的值,从0开始计算)
- 不同学号的用户分别进行了一次的访问、后面2019102857写的意思是从第0位开始算起第2019102857个位。显然这样子的设置并不是很合理。学号是由相同的数组开头的,这里是201910。要是直接将上述学号直接操作Bitmaps的位偏移量,势必会造成内存的浪费,我们可以使用学号减去201910,后续的数组作为偏移量来进行计算。
- gitbit获取值
- gitbit key offset
- 存在访问或则会返回1,对应的学号id没有访问过,或者学号都不存在都会返回0
- bitcount获取Bitmaps指定范围位数上是1的个数
- bitcount [strat] [end]
- 从学号0到学号2019102860刚好这之间只有4人各自访问一次
- bitop Bitmaps 间的运算
- bitop op destkey key [key …]
- 下面这个是求并集
- and并集、or交集、not非、xor异或
- 计算Bitmaps中第一个值为targetBit的位偏移量
- bitpos key targetBit [start] [end]
- start 、end可以省略,省略将会遍历整个Bitmaps
- 返回值是字符串里面第一个被设置为0或者1的bit位
删除当前redis数据库中key的命令
- flushdb
- flushall
- 删除redis中全部key的命令
Bitmaps存储的优势对比
假设有一个网站,用户总量拥有一个亿。每天的日活用户量有5000万。现在我们分别使用集合类型、Bitmaps类型来进行存储活跃用户分析。
假如每一个用户id是Long长整型64位。集合类型的占据空间计算为64x50000000=3200000000位/8=400000000b/1024=390624KB/1024=381.4697265625MB
使用Bitmaps进行存储1位x1亿=1亿(位)/8=12500000b/1024=12207KB/1024=11.9209289MB假设现在没有一个亿用户,只有50000个用户
集合类型计算就是64x50000=3200000位/8=400000b/1024=390.625KB/1024=0.38MB
Bitmaps类型存储。。。