IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> redis-Bitmap、HyperLogLog、GEO -> 正文阅读

[大数据]redis-Bitmap、HyperLogLog、GEO

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命令:会根据输入的经纬度位置,查找以这个经纬度为中心的一定范围内的其他元素。当然,我们可以自己定义这个范围。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:54:36  更:2021-10-07 13:55:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:19:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码