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基数统计的资料请关注我们其它相关文章!

(0)

相关推荐

  • Redis数据类型string和Hash详解

    目录 String类型命令操作 设置指定key的值 获取指定key的值 返回key中字符串值的子串 获取多个给定key的值 返回key所对应的字符串的长度 设置一个或多个键值对 将key中所存储的数值加一 将key中所存储的数值减一 字符串追加 Hash类型 设置一个Hash数据 获取指定哈希表中所有的字段和值 获取存储在哈希表中指定字段的值 删除一个或多个哈希表字段 获取哈希表中字段的数量 获取哈希表中的所有字段 获取哈希表中所有的值 摘要:Redis中有五大数据类型,分别是String.Li

  • Redis特殊数据类型Geospatial地理空间

    目录 Redis特殊数据类型Geospatial地理空间 一.geoadd 二.geopos 三.geodist 四.georadius 五.georadiusbymember 六.geohash Redis特殊数据类型Geospatial地理空间 这是在redis 3.2版本推出的,推算地理位置的信息,两地之间的距离,周围方圆的人等等场景都可以用它实现. 一.geoadd 将指定的地理空间位置(纬度.经度.名称)添加到指定的key中. 这里可以借助网上的一些查询经纬度的工具来获取数据. geo

  • redis部署及各种数据类型使用命令详解

    目录 编译安装redis 开始部署 报错gcc命令没有找到: #解决编译安装所需的依赖环境继续部署 redis服务端运行和客户端连接 redis配置 redis简单配置并启动 set.get命令 简单配置文件介绍 redis基础数据类型 redis命令 redis简单命令 字符串类型命令 list类型,双向队列 redis的集合,是一种无序的集合,集合中的元素没有先后顺序. 哈希数据结构 发布订阅 编译安装redis 开始部署 [root@mcw01 ~]$ ls anaconda-ks.cfg

  • 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特殊数据类型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的查

随机推荐