栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis-Bitmap、HyperLogLog、GEO

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis-Bitmap、HyperLogLog、GEO

文章目录
  • bitmap
  • HyperLogLog基数统计(去重统计)
  • GEO(LBS)

bitmap

是什么?
Bitmap是用String类型作为底层数据结构实现的一种统计二值状态的数据类型。String类型是会保存为二进制的字节数组,所以,Redis就把字节数组的每个bit位利用起来,用来表示一个元素的二值状态。你可以把Bitmap看作是一个bit数组。

redis提供了 SETBIT、 GETBIT、BITCOUNT、BITOP 四个命令用于处理bitmap。

  • SETBIT
    用于设置位数组指定偏移量上的二进制位的值, 位数组的偏移量从0开始计数, 而二进制位的值则可以是0或者1

  • GETBIT
    用于获取位数组指定偏移量上的二进制位的值

  • BITCOUNT
    用于统计位数组里面, 值为1的二进制位的数量

  • BITOP
    可以对多个位数组进行按位与( and )、 按位或( or )、 按位异或( xor)、按位取反( not )运算

HyperLogLog基数统计(去重统计)

是什么
HyperLogLog是一种用于基数统计(去重)的数据类型,它的最大优势就在于,当集合元素数量非常多时,它计算基数所需的空间总是固定的并且还很小。

典型应用场景:
一天内有多少用户登录,因为用户可能重复登录,但是只记一次,所以需要利用HyperLogLog进行去重。

存在以下的特点:

  • 能够使用极少的内存来统计巨量的数据,在 Redis 中实现的 HyperLogLog,只需要12K内存就能统计2^64个数据。
  • 计数存在一定的误差,误差率整体较低。标准误差为 0.81% 。
  • 误差可以通过设置辅助计算因子进行降低。

常用的基本命令

//添加指定元素到 HyperLogLog 中。
PFADD key element [element ...] 
//返回给定 HyperLogLog 的基数估算值。
PFCOUNT key [key ...] 
//将多个 HyperLogLog 合并为一个 HyperLogLog
PFMERGE destkey sourcekey [sourcekey ...] 

实现原理
内部维护了16384个桶来记录各自桶的元素数量,当添加元素时,通过 hash 算法将这个元素分派到其中的一个桶中,同样的元素总是会散列到同样的桶。这样总的去重计数就是所有非零桶的总和。

GEO(LBS)

将用户给定的地理位置信息储存起来,并对这些信息进行操作。
GEO常用语LBS(Location-based Service)

GeoHash的编码方法
为了能高效地对经纬度进行比较,Redis采用了业界广泛使用的GeoHash编码方法,这个方法的基本原理就是“二分区间,区间编码”。
当我们要对一组经纬度进行GeoHash编码时,我们要先对经度和纬度分别编码,然后再把经纬度各自的编码组合成一个最终编码。

首先,我们来看下经度和纬度的单独编码过程。

对于一个地理位置信息来说,它的经度范围是[-180,180]。GeoHash编码会把一个经度值编码成一个N位的二进制值,我们来对经度范围[-180,180]做N次的二分区操作,其中N可以自定义。

在进行第一次二分区时,经度范围[-180,180]会被分成两个子区间:[-180,0)和[0,180](我称之为左、右分区)。此时,我们可以查看一下要编码的经度值落在了左分区还是右分区。如果是落在左分区,我们就用0表示;如果落在右分区,就用1表示。这样一来,每做完一次二分区,我们就可以得到1位编码值。

然后,我们再对经度值所属的分区再做一次二分区,同时再次查看经度值落在了二分区后的左分区还是右分区,按照刚才的规则再做1位编码。

当做完N次的二分区后,经度值就可以用一个N bit的数来表示了。

当一组经纬度值都编完码后,我们再把它们的各自编码值组合在一起.
组合的规则是:最终编码值的偶数位上依次是经度的编码值,奇数位上依次是纬度的编码值,其中,偶数位从0开始,奇数位从1开始。

常用命令:

  • GEOADD命令:用于把一组经纬度信息和相对应的一个ID记录到GEO类型集合中;
  • GEORADIUS命令:会根据输入的经纬度位置,查找以这个经纬度为中心的一定范围内的其他元素。当然,我们可以自己定义这个范围。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号