Redis数据结构(二)Bitmap位图的实现原理
# Redis数据结构(二)Bitmap位图的实现原理
# 一、什么是Bitmap?
Bitmaps并不是一个实际的数据类型,而是在String类型上定义的一组面向比特的操作,由于String类型最大长度为512 MB,因此它们可以存储2^32(40亿)个比特位信息
# 二、位图的优势
- 基于最小的单位bit进行存储,所以非常省空间。
- 设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的
- 二进制数据的存储,进行相关计算的时候非常快
# 三、常用命令
# 1、基本操作
SETBIT
命令的第一个参数是位数,第二个参数是将位数设置为1或0的值。如果所地址位在当前字符串长度之外,命令会自动放大字符串> setbit key 10 1 (integer) 1
1
2
GETBIT
只是返回指定索引上的位值。超出范围的位(地址位于存储到目标键的字符串长度之外的位)总是被认为是零> getbit key 10 (integer) 1
1
2
BITCOUNT
执行计数,报告比特数设置为1的个数> bitcount key (integer) 2
1
2
# 2、集合操作
#集合操作,对一个或多个bitmap集合操作(AND OR XOR NOT),最终结果保存到destkey
BITOP AND destkey srckey1 srckey2 srckey3 ... srckeyN
BITOP OR destkey srckey1 srckey2 srckey3 ... srckeyN
BITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyN
BITOP NOT destkey srckey
1
2
3
4
5
2
3
4
5
# 四、应用场景
各种实时分析以及高效、高性能存储与对象ID相关的布尔信息
- 用户签到
- 点赞/取消点赞
- 日活统计
# 五、参考文档
https://redis.io/docs/manual/data-types/data-types-tutorial/#bitmaps