redis之bitmap&hyperloglog&Geo

1.位图bitmap

由0、1状态表现的二进制位的bit数组。使用场景:是否登录过、京东每日签到送京豆、电影广告是否被点击播放过等。

用String类型作为底层数据结构实现的一种统计二值状态的数据类型。位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(称之为索引)。

Bitmap支持的最大位数是2^32位。可以极大的节约存储空间,使用512M内存可以存储多达42.9「2的32次」亿的字节信息。

// offset即下标或者索引,其最大值为2^32   value取值0|1
setbit key offset value
getbit key offset

1.1.strlen

统计字节占用量。即1个字节8个比特位,如果bitmap数组中只有索引0-7内存在value,则strlen取值为1,表示1个字节的长度。如果bitmap数组中存在索引0-8内存在value,则则strlen取值为2。…

1.2.bitcount

全部键里面含有1的有多少。

1.3.bitop

BITOP operation destkey key [key ...]

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种:

  • BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
  • BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。
  • BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
  • BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey 。

除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入。

2.基数统计HyperLogLog

场景:统计某个网站的UV。
定义:去重统计功能的基数估计算法,称之为基数统计HyperLogLog。用来做基数统计的算法,HyperLogLog的优点是在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的,并且是很小的。在Redis里面,每个HyperLogLog键只需要花费12kb内存,就可以计算接近2^64个不同元素的基数,这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。

去重结果并非百分之百正确,存在0.81%的误差

基数的理解:
全集I = {3,2,4,5,6,5,2,12}。去掉重复的内容后,基数 = {3,2,4,5,6,12} = 6。

基数统计:用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算。

pfadd key element[element...] //添加指定元素到HyperLogLog。但是不会保存这些输入元素,只是为了根据输入元素得到基数统计值
pfcount key [key ...]// 返回给定 HyperLogLog 的基数统计值
pfmerge destkey sourceKey [sourceKey...]//将多个 sourceKey 合并为一个key为destkey的 HyperLogLog

3.地理空间Geo

你可能感兴趣的:(redis,数据库,缓存)