Redis特殊数据类型HyperLogLog基数统计算法讲解
目录
- Redis HyperLogLog基数统计
- 一、pfadd
- 二、pfcount
- 三、pfmerge
Redis HyperLogLog基数统计
HyperLogLog 是用来做基数统计的算法。
先了解下什么是基数。
比如数据集{1, 3, 5, 7, 5, 7, 8}
,那么这个数据集的基数集为{1, 3, 5 ,7, 8}
,基数(不重复元素)为5。
如果,现在需要统计一下网页的UV,那么就会涉及到去重了,这种场景就很适合用HyperLogLog。
这不就是set集合嘛?我用set来得出不重复的元素也可以呀。
没错,是可以,但是当数据量非常大的时候,你这个set是不是会占用非常大的内存呢?
如果用HyperLogLog来处理就好了,因为它计算基数所需要的空间是一定的,只要12kb
,就可以计算接近 2^64
个不同元素的基数。
但是注意在这个数量级下,是会存在0.81%
的错误率的,所以说具体还得看业务是否可以接受这样的错误率。
像上面说的统计UV的场景,这点错误率是可以忽略的。
一、pfadd
将所有元素参数添加到 HyperLogLog 数据结构中。
pfadd mypf 1 2 3 a b c 3 4 5 c d a
二、pfcount
返回给定 HyperLogLog 的基数估算值。
pfcount mypf
可以看到,返回的是9,也就是不重复的元素数量有9个。
三、pfmerge
将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。
pfmerge mypftotal mypf3 mypf4
把mypf3、mypf4
合并到mypftotal
上。
以上就是Redis特殊数据类型HyperLogLog基数统计算法讲解的详细内容,更多关于Redis HyperLogLog基数统计的资料请关注我们其它相关文章!
相关推荐
-
redis部署及各种数据类型使用命令详解
目录 编译安装redis 开始部署 报错gcc命令没有找到: #解决编译安装所需的依赖环境继续部署 redis服务端运行和客户端连接 redis配置 redis简单配置并启动 set.get命令 简单配置文件介绍 redis基础数据类型 redis命令 redis简单命令 字符串类型命令 list类型,双向队列 redis的集合,是一种无序的集合,集合中的元素没有先后顺序. 哈希数据结构 发布订阅 编译安装redis 开始部署 [root@mcw01 ~]$ ls anaconda-ks.cfg
-
Redis数据类型string和Hash详解
目录 String类型命令操作 设置指定key的值 获取指定key的值 返回key中字符串值的子串 获取多个给定key的值 返回key所对应的字符串的长度 设置一个或多个键值对 将key中所存储的数值加一 将key中所存储的数值减一 字符串追加 Hash类型 设置一个Hash数据 获取指定哈希表中所有的字段和值 获取存储在哈希表中指定字段的值 删除一个或多个哈希表字段 获取哈希表中字段的数量 获取哈希表中的所有字段 获取哈希表中所有的值 摘要:Redis中有五大数据类型,分别是String.Li
-
Redis三种特殊数据类型的具体使用
目录 一.HyperLogLog基数统计 1.1什么是基数? 1.2使用基数统计的好处 1.3应用场景 1.4注意事项 1.5基本命令 1.6使用 二.Geospatial地理位置 2.1介绍 2.2使用场景 2.3基本命令 2.4详细讲解 2.4.1GEOADD 2.4.2GEOPOS 2.4.3GEODIST 2.4.4GEORADIUS 2.4.5GEORADIUSBYMEMBER 2.4.6GEOHASH 2.4.7ZRANGE 2.4.8ZREM 三.BitMap 介绍 小结 一.Hy
-
Redis特殊数据类型Geospatial地理空间
目录 Redis特殊数据类型Geospatial地理空间 一.geoadd 二.geopos 三.geodist 四.georadius 五.georadiusbymember 六.geohash Redis特殊数据类型Geospatial地理空间 这是在redis 3.2版本推出的,推算地理位置的信息,两地之间的距离,周围方圆的人等等场景都可以用它实现. 一.geoadd 将指定的地理空间位置(纬度.经度.名称)添加到指定的key中. 这里可以借助网上的一些查询经纬度的工具来获取数据. geo
-
Redis特殊数据类型bitmap位图
目录 Redis数据类型bitmap位图 一.setbit 二.getbit 三.bitcount Redis数据类型bitmap位图 bitmap数据结构,是基于二进制位来进行操作记录的,只有0 和 1两个状态.可以想象成一个数组,里面只有0或者1. 能干嘛呢? 现实中会有这些场景,比如统计用户信息,活跃用户和非活跃用户.登录的.未登录的用户,打卡的.未打卡的,像这种只有2个状态,并且数据量非常大的,就适合使用bitmap. 网上找了一个对比,可以帮助记忆下bitmap的优点. 一.setbi
-
Redis特殊数据类型HyperLogLog基数统计算法讲解
目录 Redis HyperLogLog基数统计 一.pfadd 二.pfcount 三.pfmerge Redis HyperLogLog基数统计 HyperLogLog 是用来做基数统计的算法. 先了解下什么是基数. 比如数据集{1, 3, 5, 7, 5, 7, 8},那么这个数据集的基数集为{1, 3, 5 ,7, 8},基数(不重复元素)为5. 如果,现在需要统计一下网页的UV,那么就会涉及到去重了,这种场景就很适合用HyperLogLog. 这不就是set集合嘛?我用set来得出不重
-
Redis高级数据类型Hyperloglog、Bitmap的使用
前言 很多小伙伴在面试中都会被问道 Redis的常用数据结构有哪些? 可能很大一部分回答都是 string.hash.list.set.zset.当然啦,这个答案肯定是没有错的,但是相信这个答案,面试官已经听的耳朵都起茧了. 本身我们选择的这个行业竞争就极强,学历拼不过难道还要知识都拼不过吗??? 希望进来的小伙伴能好好看完这篇文章,也希望你以后的回答能是 常用的数据结构有string.hash.list.set.zset,但我平时可能还会用到 Hyperloglog和Bitmap.相信面试官听
-
聊一聊redis奇葩数据类型与集群知识
目录 多样的数据类型 搞懂集群 复制过程的细节 需要一个管理者 更强的横向伸缩性 总结 多样的数据类型 string 类型简单方便,支持空间预分配,也就是每次会多分配点空间,这样 string 如果下次变长的话,就不需要额外的申请空了,当然前提是剩余的空间够用. List 类型可以实现简单的消息队列,但是注意可能存在消息丢失哦,它并不持 ACK 模式. Hash 表有点像关系型数据库,但是当 hash 表越来越大的时候,请注意,避免使用 hgetall 之类的语句,因为请求大量的数据会导致red
-
Redis如何使用HyperLogLog的实现
目录 1. 概述 2. 什么是基数? 3. 命令 3.1 PFADD 3.2 PFCOUNT 3.3 PFMERGE 1. 概述 Redis 在 2.8.9 版本添加了 HyperLogLog 数据结构,用来做基数统计,其优点是在输入元素的数量非常大时,计算基数所需的空间比较小并且一般比较恒定. 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存就可以计算接近 2^64 个不同元素的基数.这和计算基数时,元素越多耗费内存越多的集合形成鲜明对比.但是,因为 Hype
-
redis中数据类型命令整理
redis是键值对的数据库,有5中主要数据类型: 字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset) 几个基本的命令: 函数 说明 keys * 获得当前数据库的所有键 exists key [key ...] 判断键是否存在,返回个数,如果key有一样的也是叠加数 del key [key ...] 删除键,返回删除的个数 type key 获取减值的数据类型(string,hash,list,set,zset) flush
-
Java中4种经典限流算法讲解
目录 限流是什么? 常见的限流算法 固定窗口限流算法 滑动窗口限流算法 漏桶算法 令牌桶算法 最近,我们的业务系统引入了Guava的RateLimiter限流组件,它是基于令牌桶算法实现的,而令牌桶是非常经典的限流算法.本文将跟大家一起学习几种经典的限流算法. 限流是什么? 维基百科的概念如下: In computer networks, rate limiting is used to control the rate of requests sent or received by a net
-
redis在java中的使用(实例讲解)
1.首先下载jar包放到你的工程中 2.练习 package com.jianyuan.redisTest; import java.util.Iterator; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedis; public class RedisTest { public static void main(String[] args) { //连接本地的Redis服务 Jedis je
-
(MariaDB)MySQL数据类型和存储机制全面讲解
1.1 数据类型概览 数据类型算是一种字段约束,它限制每个字段能存储什么样的数据.能存储多少数据.能存储的格式等.MySQL/MariaDB大致有5类数据类型,分别是:整形.浮点型.字符串类型.日期时间型以及特殊的ENUM和SET类型. 这5种数据类型的意义.限制和相关说明如下图所示: 各数据类型占用字节数,参见mariadb官方手册. 1.2 存储机制和操作方式 数据类型之所以能限定字段的数据存储长度,是因为在创建表时在内存中严格划定了地址空间,地址空间的长度是多少就能存储多少字节的数据.当然
-
浅析MySQL的基数统计
一.基数是啥? Cardinality指的就是MySQL表中某一列的不同值的数量. 如果这一类是唯一索引,那基数 = 行数. 如果这一列是sex,枚举类型只有男女,那它是基数就是2 Cardinality越高,列就越有成为索引的价值.MySQL执行计划也会基于Cardinality选择索引. 通过下面的方式可以看到表中各列的基数. 比如这个经典的例子: 有一列为sex,那对于sex列中存储的值来说 非男即女,它的基数最大就是2. 那也就完全没有必要为sex建立索引.因为,为了提升你基于sex的查
随机推荐
- 在php7中MongoDB实现模糊查询的方法详解
- PHP实现Session入库/存入redis的方法
- php Smarty date_format [格式化时间日期]
- 简述AngularJS相关的一些编程思想
- oracle comment命令用法示例分享
- 微信小程序 wx.login解密出现乱码的问题解决办法
- js简单实现图片延迟加载的方法
- C语言实现的猴子偷桃之类算法
- mysql中coalesce()的使用技巧小结
- Python MySQL进行数据库表变更和查询
- mysqldumpslow用法示例(慢查询)
- ThinkPHP中处理表单中的注意事项
- Node.js connect ECONNREFUSED错误解决办法
- JS+CSS实现分类动态选择及移动功能效果代码
- JS获取多维数组中相同键的值实现方法示例
- 使用jquery hover事件实现表格的隔行换色功能示例
- 防止黑客侵入你正在使用的Windows系统(克隆管理员账户)
- 浅谈java中Math.random()与java.util.random()的区别
- Android仿微信联系人列表字母侧滑控件
- 三网合一加MPLS配置实例