《Redis开发与运维》笔记-Bitmaps与Hyperloglog
Bitmaps
数据结构模型
Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。
Bitmaps单独提供了一套命令,所以在Redis中操作Bitmaps和操作字符串类型的方法不太一样。可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。
命令
设置值
setbit key offset value
示例:
//设置key 为bit:demo 位移量为100 的值为0
setbit bit:demo 100 0
//设置key 为bit:demo 位移量为101 的值为1
setbit bit:demo 101 1
获取值
//获取键的第offset位的值(从0开始算) 如果位移量不存在,返回结果也会是0
getbit key offset
获取Bitmaps指定范围值为1的个数
bigcount key start end
start end分别代表范围开始和结束的字节数。一个字节等于8位 ,Bitmaps是按位存储的。
计算Bitmaps中第一个值为targetBit的偏移量
bitpos key targetBit start end
Bitmaps的运算
bitop op destkey key...
bitop是一个复合操作,可以做多个Bitmaps的and(交集),or(并集),not(非),xor(异或)操作并将结果保存到destkey中。
Hyperloglog
Hyperloglog并不是一种新的数据结构(实际上也是字符串类型),而是一种基数算法,通过Hyperloglog可以利用极小的内存空间完成独立总数的统计。因此提供了三个命令操作:
pfadd 添加
pfadd key element...
pfcount 计算独立用户数
pfcount key...
pfmerge 合并
//可以求出多个Hyperloglog的并集并赋值给destkey
pfmerge destkey sourcekey...
Hyperloglog虽然内存占用量非常小,但是存在错误率。
选择此类型原则:
- 只为了计算独立总数,不需要获取单条数据;
- 可以容忍一定误差率,毕竟Hyperloglog在内存的占用量上有很大的优势。