位图(bitmap)使用
简介位图(也称位数组或位向量)是由比特位(bit)组成的数组,它的底层数据类型是字符串。因为字符串本质是二进制大对象,所以可以将其视作位图。同时位图存储的是Boolean信息,所以在某些大数据的情况下可以节省很多内存空间。
位图(也称位数组或位向量)是由比特位(bit)组成的数组,它的底层数据类型是字符串。因为字符串本质是二进制大对象,所以可以将其视作位图。同时位图存储的是Boolean信息,所以在某些大数据的情况下可以节省很多内存空间。
假如我们在统计用户今日是否登录的情况下,如果有10亿个用户的id数,那么使用位图就会分配10亿个比特,内存占用大约在120MB左右。如果这个存放在集合中,如果使用8个字节的整型来存储用户的ID,那么就需要7GB的内存进程存储。所以使用位图在存储数据量大的情况下还是有很多优势。
以上的情况都必须建立在位图分布分均匀的情况下,如果有10亿个用户,而使用位图只有100万的用户登录,那么这时候位图就很稀疏,分布不均匀,就会造成Redis服务器阻塞。可能这时候使用集合比位图更加合适。
操作命令
SETBIT、GETBIT、BITCOUNT、BITOP
1、使用SETBIT命令设置相应的比特位
127.0.0.1:6379> SETBIT "bit_1" 10 1 #后面是1表示真,0表示假
(integer) 0
127.0.0.1:6379> SETBIT "bit_1" 100 1
(integer) 0
2、使用GETBIT命令获取的指定偏移处的比特位的值
127.0.0.1:6379> GETBIT "bit_1" 10
(integer) 1
127.0.0.1:6379> GETBIT "bit_1" 1000
(integer) 0
3、使用BITCOUNT命令获取位图中设置为1的比特数
127.0.0.1:6379> BITCOUNT "bit_1"
(integer) 2
127.0.0.1:6379> SETBIT "bit_1" 100 0 #将100位上的设为0
(integer) 1
127.0.0.1:6379> BITCOUNT "bit_1"
(integer) 1
4、使用BITOP命令进行位操作,支持四种操作:AND、OR、XOR和NOT。运算后的结果会存储在一个目标键中。
#准备bit_2位图,设置相应的值,目前bit_1中只有10这个位置上有值
127.0.0.1:6379> SETBIT "bit_2" 3 1
(integer) 0
127.0.0.1:6379> SETBIT "bit_2" 5 1
(integer) 0
127.0.0.1:6379> SETBIT "bit_2" 10 1
(integer) 0
127.0.0.1:6379> BITCOUNT "bit_2"
(integer) 3
#进行AND操作,然后存储到bit_3中
127.0.0.1:6379> BITOP AND "bit_3" "bit_1" "bit_2"
(integer) 13
127.0.0.1:6379> BITCOUNT "bit_3"
(integer) 1
127.0.0.1:6379> GETBIT "bit_3" 10
(integer) 1
127.0.0.1:6379> GETBIT "bit_3" 3
(integer) 0
127.0.0.1:6379> GETBIT "bit_3" 5
(integer) 0
#进行OR操作,存储在bit_4
127.0.0.1:6379> BITOP OR "bit_4" "bit_1" "bit_2"
(integer) 13
127.0.0.1:6379> GETBIT "bit_4" 10
(integer) 1
127.0.0.1:6379> GETBIT "bit_4" 3
(integer) 1
127.0.0.1:6379> GETBIT "bit_4" 5
(integer) 1
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
python多维数组为一维数组(reshape、flatten、ravel),使用NumPy库.
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。