1.数据结构模型
现代计算机用二进制作为信息的基础单位,1个字节等于8位,例如 "big"字符串
是由3个字节组成,但实际在计算机存储时将其用二进制表示,"big"分别对应的
ASCII码分别是98,105,103,对应的二进制分别是01100010,01101001,01100111
许多开发语言提供了操作位的功能,合理地使用位能够有效地提高内存使用率和
开发效率。redis提供了bitmaps这个"数据结构"可以实现对位的操作。
bitmap本身不是一种数据结构,实际上它就是字符串,但是他可以对字符串的位进行操作。
bitmaps单独提供了一套命令,所以在redis中使用bitmaps和使用字符串的方法不太
相同,可以把bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,
数组的下标在bitmaps中叫作偏移量。
2.bitmaps设置值
setbit key offset value
offset:从0开始。
将用户是否访问网站存放在bitmaps中,将访问的用户记作1,没有访问的用户记作0;
用户偏移量作为用户的Id;
192.168.1.7:6379> setbit unique:users:20240620 0 1
(integer) 0
192.168.1.7:6379> setbit unique:users:20240620 5 1
(integer) 0
192.168.1.7:6379> setbit unique:users:20240620 11 1
(integer) 0
192.168.1.7:6379> setbit unique:users:20240620 15 1
(integer) 0
192.168.1.7:6379> setbit unique:users:20240620 19 1
(integer) 0
192.168.1.7:6379> getbit unique:users:20240620 19
(integer) 1
192.168.1.7:6379> getbit unique:users:20240620 15
(integer) 1
192.168.1.7:6379> getbit unique:users:20240620 11
(integer) 1
192.168.1.7:6379> getbit unique:users:20240620 5
(integer) 1
192.168.1.7:6379> getbit unique:users:20240620 0
(integer) 1
192.168.1.7:6379>
3.获取bitmaps指定范围值为1的个数。
bitcount key [start end]
[start end]:代表起始和结束字节数。
192.168.1.7:6379> bitcount unique:users:20240620
(integer) 5
192.168.1.7:6379> bitcount unique:users:20240620 1 3
(integer) 3