位图(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
partprobe命令用于在硬盘分区发生变化是,更新Linux内核中的硬盘分区表数据。有时在使fdisk、part命令对硬盘进行分区后,会发现找不到新分区,此时需要重启系统才能使修改生效,但是partprobe可以不重启系统就让修改的分区表生效。
发布-订阅(Publish-Subscribe,PubSub),简单的说,在发布-订阅模式下,想要发布事件的发布者会把消息发送到一个PubSub频道(Channel),这个频道会把这个事件投递给这个频道感兴趣的每一位订阅者。许多流行的消息传递中间件,比如Kafka和ZeroMQ,就是利用了这个模式来构建消息投递系统,Redis也是一样。
清除CSS浮动几乎可以说的每个WEB前端开发者所必备的技能之一,但有些刚刚接触HTML、CSS的开发者,还不懂如何清除CSS浮动,导致页面布局错乱,本文将介绍三种清除CSS浮动的方法,希望对大家有所帮助。
开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。
快速生成表格
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问题