位图(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
nc是一个简单、可靠、强大的网络工具,可以建立TCP连接,发送UDP数据包,监听任意的TCP和UDP端口,进行端口扫描,处理IPv4和IPv6数据包。如果过系统中没有nc命令,需要进行安装:yum -y install nc
最近想把公司的内网几台服务器能通过打开一个网站的方式进行管理,所以寻求了一圈最终选择了Teleport。Teleport,这是一个使用Go语言编写的,高效的现代SSH管理工具。
在前面我们已经介绍了Redis的持久化RDB和AOF。但是很多时候,我们需要考虑很多因素:服务器宕机数据丢失、持久化时的性能开销、持久化文件的大小以及数据恢复速度。RDB持久化,两次快照之间写入的数据可能会丢失,当写入流量较大且数据集也很大时,RDB中系统调用fork()的延迟和内存的开销也是一个问题。但是RDB比AOF文件占用的磁盘空间更小,并且从RDB中恢复数据的速度更快。事实上,我们可以同时启动这两个功能。
Centos中用Chrome将网页导出为PDF,chrome --headless --print-to-pdf https://developer.chrome.com/
最近国内访问GitHub特别的慢,那么对于一名程序猿来说,GitHub是多么的重要,本文主要记录如何加快GitHub的访问。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
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问题