Redis 中 Bitmap 详解 
                                                    
                        
                    
                    
  
                    
                    Bitmap 是什么
Bitmap 即位图,就是通过一个 bit 位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身。我们知道 8 个 bit 可以组成一个 Byte,所以 bitmap 本身会极大的节省储存空间。

Redis从 2.2.0 版本开始新增了 setbit,getbit,bitcount等几个 bitmap 相关命令。虽然是新命令,但是并没有新增新的数据类型,因为 setbit 等命令只不过是在 set 上的扩展。
Bitmap 的优势和限制
优势
- 基于最小的单位bit进行存储,所以非常省空间。
- 设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的。
- 二进制数据的存储,进行相关计算的时候非常快。
- 方便扩容
限制
- redis中bit映射被限制在512MB之内,所以最大是2^32位。建议每个key的位数都控制下,因为读取时候时间复杂度O(n),越大的串读的时间花销越多。
setbit 命令介绍
指令 SETBIT key offset value
设置或者清空 key 的 valuekey 用户自定义的 keyoffset 偏移量value bit值,只能为 0 或 1
原理介绍
set test a这个很好理解,把 key 是 test 的值设置为 a
其中 a 的 Ascii值是 97,97 的二进制是 1100001 [ PHP代码: echo decbin(ord(‘a’)); ]
譬如 b 的 ascii 值是 98,转成二进制是 1100010。
从左往右数(索引从 0 开始),第 6 位和第 7 位不一致。因此只要 a 的二进制值的第 6 位改成 1,第 7 位改成 0 就变成了 b
setbit test 6 1
setbit test 7 0
get test然后就可以看到变成了 b
bitmap类型,它也是从string类型扩展出来的结构,所以它的命令也可以操作string。
getbit key offset 获取某个偏移量的值
bitcount key [start end], 统计出bit值为1的数量
这里的 start 和 end 指的是字节(不是位)
以上内容为整合各博客文章而来
redis 命令 setbit、bitcount、getbit、bitop
第十章:Redis中bitmap的妙用
一看就懂系列之 详解redis的bitmap在亿级项目中的应用
【redis缓存】Bitmap类型实现用户签到
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           邢闯洋 的个人博客
 邢闯洋 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: