首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏个人技术博客

    ⑧【HyperLoglog】Redis数据类型:HyperLoglog

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ⑧Redis HyperLoglog 基本操作命令 HyperLoglog 是用来做基数统计的算法,优点在于当输入元素的数量或者体积非常大时,计算基数所需的空间总是固定且很小的。 基数统计:用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算 Redis中每个HyperLoglog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数。 但,HyperLoglog只会根据输入的元素来计算基数,无法存储输入元素本身,所以无法像集合那样返回输入的各个元素。 key [key ...] # 获取hyperloglog的基数数量,可以同时计算多个key的基数数量 pfcount hll1 3. pfmerge 将多个HyperLoglog合并成一个 pfmerge

    28210编辑于 2023-11-26
  • 来自专栏用户8644135的专栏

    Redis HyperLogLog

    Redis HyperLogLog Redis 在2.8.9版本添加了HyperLogLog结构。 Redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。 在Redis里面,每个HyperLogLog键只需要花费 12 KB 内存,就可以计算接近 2^64个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。 什么是基数? 命令 下表列出了redis HyperLogLog的基本命令: 序号 命令及描述 1 PFADD key element [element ...]添加指定元素到 HyperLogLog 中。

    43520发布于 2021-07-02
  • 来自专栏从码农的全世界路过

    Redis HyperLogLog

    HyperLogLog是一种概率算法,提供了不精确的去重计数方案,是有误差的基数统计. 基数统计是用来统计一个集合中不重复的元素个数,例如,统计网站的UV或者网站搜索的关键词数量。 这种方法可以大大节省内存,同时保证误差控制在一定范围内.HyperLogLog便是其中一种概率算法. redis中实现的HyperLogLog算法提供了两种存储方式; 一种是密集存储,只需要12K内存, HyperLogLog是一个很复杂的算法,这里只简单说明下其计算过程. 首先需要准备一定数量的桶,用来记录各桶内元素的数量.

    37520编辑于 2022-06-20
  • 来自专栏全栈开发那些事

    HyperLogLog相关命令

    通过Redis的HyperLogLog对象能高效地统计基数。 利用HyperLogLog命令可以在一个键上同时添加多个值。 其中,sourcekey是待合并的对象,可以是一个或多个;destkey是合并后HyperLogLog的键,如果合并前destkey不存在,则会新建一个。 4、统计网站访问总人数 利用HyperLogLog统计访问人数的方法。 在实际项目里,可能访问列表会很长,用HyperLogLog统计的性能比较快,另外还能用较小的存储空间代价来完成通国际访问总人数的工作。

    42440编辑于 2023-02-25
  • 来自专栏Golang开发

    Redis(9)——HyperLogLog

    HyperLogLog并不是一种新的数据结构(实际类型是字符串类型),而是一种计数算法。而是一种基数算法。 pfadd 添加元素,如果添加成功返回1 127.0.0.1:6379> pfadd 2019-04-29:unique:ids u1 u2 u3 u4 (integer) 1 pfcount 计算一个或多个HyperLogLog :6379> pfcount 2019-04-29:unique:ids (integer) 5 pfmerge pfmerge destkey sourcekey [sourcekey ] 计算多个HyperLoglog 2019-04-29:unique:ids 2019-04-30:unique:ids OK 127.0.0.1:6379> pfcount 2019-04:unique:ids (integer) 7 HyperLogLog 毕竟HyperLogLog 内存占用量非常小

    49430发布于 2019-05-29
  • 来自专栏Nicky's blog

    Redis HyperLogLog用法简介

    本文链接:https://blog.csdn.net/u014427391/article/details/95992173 (1)HyperLogLog简介 在Redis 在 2.8.9 版本才添加了 HyperLogLogHyperLogLog算法是用于基数统计的算法,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。 HyperLogLog适用于大数据量的统计,因为成本相对来说是更低的,最多也就占用12kb内存 业务场景,HyperLogLog常用于大数据量的统计,比如页面访问量统计或者用户访问量统计 举个例子,假如要统计一个页面的访问量 针对上面大访问量的情况,redis是有实现了HyperLogLog算法,HyperLogLog 这个数据结构的发明人 是Philippe Flajolet 教授 Redis集成的HyperLogLog使用语法主要有 当然HyperLogLog算法一开始就是为了大数据量的统计而发明的,所以很适合那种数据量很大,然后又没要求不能有一点误差的计算,HyperLogLog 提供不精确的去重计数方案,虽然不精确但是也不是非常不精确

    53440发布于 2019-08-29
  • 来自专栏java学习java

    Redis之HyperLogLog类型解读

    基本介绍 HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。 基数是什么? 添加指定元素到 HyperLogLog 中。 2 PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值。 将多个 HyperLogLog 合并为一个 HyperLogLog pfadd Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中。 pgmerge Pgmerge 命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的

    27920编辑于 2023-10-15
  • 来自专栏SmartSi

    Redis 如何使用HyperLogLog

    但是,因为 HyperLogLog 只会根据输入元素来计算基数,并不会储存输入元素本身,所以 HyperLogLog 不能像集合那样能返回输入的各个元素。 2. 什么是基数? 对于多个键,返回的是多个 HyperLogLog 并集的基数估算值,通过将多个 HyperLogLog 合并为一个临时的 HyperLogLog 计算基数估算值。 可以使用 HyperLogLog 只使用很少且恒定的内存来计算集合的不同元素个数。每个 HyperLogLog 只用 12K 加上键本身的几个字节。 时间复杂度:O(N),N是要合并的HyperLogLog的数量。 PFMERGE 命令将多个 HyperLogLog 合并为一个 HyperLogLog。 合并后的 HyperLogLog 的基数估算值是通过对所有给定 HyperLogLog 进行并集计算得出的。计算完的结果保存到指定的键中。

    90210发布于 2019-12-02
  • 来自专栏代码洁癖患者

    Redis命令详解:HyperLogLog

    HyperLogLog是Redis的高级数据结构,它在做基数统计的时候非常有用,每个HyperLogLog的键可以计算接近264不同元素的基数,而大小只需要12KB。 如果指定的key不存在,那么就创建一个空的HyperLogLog数据结构。该命令也支持不指定元素而只指定键值,如果不存在,则会创建一个新的HyperLogLog数据结构,并且返回1;否则返回0。 对于多个key,返回的是多个HyperLogLog并集的近似基数,它是通过将多个HyperLogLog合并为一个临时的HyperLogLog,然后计算出来的。 HyperLogLog可以用很少的内存来存储集合的唯一元素。(每个HyperLogLog只有12K加上key本身的几个字节) HyperLogLog的结果并不精准,错误率大概在0.81%。 除了这三个命令,我们还可以像操作String类型的数据那样,对HyperLogLog数据使用SET和GET命令。关于HyperLogLog的原理以及其他细节,我将在明天的文章中进行介绍,敬请期待。

    55110发布于 2020-03-11
  • 来自专栏weixuqin 的专栏

    redis 学习(14)-- HyperLogLog

    HyperLogLog 什么是 HyperLogLog HyperLogLog 是基于 HyperLogLog 算法的一种数据结构,该算法可以在极小空间完成独立数量统计。 在本质上还是字符串类型。 向HyperLogLog中添加元素 pfcount key1 [key2...] 计算HyperLogLog的独立总数 pfmerge destKey key1 [key2...] 合并多个hyperLogLog到destKey中 演示 ? A:这里要考虑两个因素: hyperloglog 的错误率为:0.81%,存储的数据不能百分百准确。 hyperloglog 不能取出单条数据。api 中也没有相关操作。 如果你没有这两个方面的顾虑,那么用 HyperLogLog 来存储大规模数据,还是非常不错的。

    39720发布于 2019-06-03
  • 来自专栏golang+php

    redis hyperloglog实现原理

    基数估算 HyperLogLog 是一种基数估算算法。所谓基数估算,就是估算在一批数据中,不重复元素的个数有多少。最常见的场景就是统计uv。 redis中实现的HyperLogLog,只需要12K内存,在标准误差0.81%的前提下,能够统计2的64次方个数据。 HyperLogLog 算法简介 伯努利过程 在认识为什么HyperLogLog能够使用极少的内存来统计巨量的数据之前,要先认识下伯努利试验。 hyperloglog过程 过程简单介绍 之前说过,HyperLogLog算法是用来计算基数的,这个抛硬币的序列和基数有什么关系呢? 当 HyperLogLog 插入了少数元素时,可以只使用少量的 XZERO、VAL 和 ZERO 进行表示,如下图所示。

    1.4K10编辑于 2022-03-03
  • 来自专栏码匠的流水账

    redis的HyperLogLog实战

    序 本文主要研究一下redis的HyperLogLog的用场 相关命令 pfadd 每添加一个元素的复杂度为O(1) 127.0.0.1:6379> pfadd uv0907 uid1 uid2 uid3 (integer) 1 添加元素到HyperLogLog中,如果内部有变动返回1,没有返回0 pfcount 作用域单个HyperLogLog时,复杂度为O(1),作用于多个HyperLogLog时, 复杂度为O(N) 127.0.0.1:6379> pfcount uv0907 (integer) 3 返回该HyperLogLog的近似基数,如果是指定多个HyperLogLog则返回的是他们的并集的近似基数 HyperLogLog中 使用场景 HyperLogLog是Probabilistic data Structures的一种,这类数据结构的基本大的思路就是使用统计概率上的算法,牺牲数据的精准性来节省内存的占用空间及提升相关操作的性能 doc hyperloglog pfadd pfcount pfmerge HyperLogLogs in Redis hyperloglog的java版使用

    1.4K10发布于 2018-09-17
  • 来自专栏idba

    Redis 数据类型 HyperLogLog

    所以,简单来说 HyperLogLog 提供不精确的去重计数。 HyperLogLog 的优点: 在输入元素的数量或者体积非常非常大时,计算基数所需的内存空间总是固定的、并且是很小的。 二 常见命令 HyperLogLog 命令只有三个,非常简单。 添加指定元素到 HyperLogLog 中 PFADD key element [element ...] 将多个 HyperLogLog 合并为一个 HyperLogLog PFMERGE destkey sourcekey [sourcekey ...] 类型相比,HyperLogLog 就非常节省空间。 所以在统计 UV 时,我们可以用 PFADD 命令(用于向 HyperLogLog 中添加新元素)把访问页面的每个用户都添加到 HyperLogLog 中。

    34120编辑于 2023-09-04
  • 来自专栏棒棒小飞人

    Redis HyperLogLog命令操作实例

    Redis HyperLogLog命令 Redis HyperLogLog是一种使用随机化的算法,以少量内存提供集合中唯一元素数量的近似值。 编号 命令 描述 1 PFADD key element [element …] 将指定的元素添加到指定的HyperLogLog 中。 2 PFCOUNT key [key …] 返回给定 HyperLogLog 的基数估算值。 3 PFMERGE destkey sourcekey [sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog Redis发送订阅 发送者(发布者)不是计划发送消息给特定的接收者

    95230发布于 2021-10-08
  • 来自专栏码匠的流水账

    hyperloglog的java版使用

    比如一个HyperLogLog的数据结构只需要花费12KB内存,就可以计算接近2^64个不同元素的基数,而错误率在1.625%. 场景 HyperLogLog一个常用的场景就是统计网站的UV。 doc HyperLogLog的核心思想原理 Probabilistic data Structures – Bloom filter and HyperLogLog for Big Data HyperLogLog

    1.6K10发布于 2018-09-17
  • 来自专栏java学习java

    Redis之HyperLogLog类型解读

    ​基本介绍 HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。 基数是什么? 添加指定元素到 HyperLogLog 中。 2 PFCOUNT key [key ...] 返回给定 HyperLogLog 的基数估算值。 将多个 HyperLogLog 合并为一个 HyperLogLog pfadd Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中。 pgmerge Pgmerge 命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的

    73280编辑于 2023-09-23
  • 来自专栏雨中散步撒哈拉

    redis | 十、redis之HyperLogLog

    一、HyperLogLog基数统计 HyperLogLog,下面简称为HLL,它是 LogLog 算法的升级版,作用是能够提供不精确的去重计数。存在以下的特点: 代码实现较难。 而 HyperLogLog 却可以用 12K 就能统计完。 1. pfadd元素添加 将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中. 如果一个HyperLogLog的估计的近似基数在执行命令过程中发了变化, PFADD 返回1,否则返回0,如果指定的key不存在,这个命令会自动创建一个空的HyperLogLog结构(指定长度和编码的字符串 了解更多HyperLogLog数据结构,请查阅PFCOUNT命令页面. 返回值 integer-reply 如果 HyperLogLog 的内部被修改了,那么返回 1,否则返回 0 . 将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set

    40520编辑于 2022-09-21
  • 来自专栏学习

    【redis】streams、geospatial、HyperLogLog、bitmaps、bitfields类型

    存储一些点之后,就可以让用户给定一个坐标,去从刚才存储的点里进行查找(按照半径,矩形区域…) 在地图领域非常重要 基本命令 GEOADD:添加位置坐标 GEOSEARCH:在给定的范围里面进行查找 HyperLogLog 1 亿 UV >8 亿字节>0.8GB HyperLogLog` 可以最多使用 12 KB 的空间,实现上述效果 之所以 set 要消耗这么大的空间,是因为 set 需要存储每个元素。 而 HyperLogLog 不存储元素的内容,但是能够记录“元素的特征”,从而在新增元素的时候,能够知道当前新增的元素,是一个已经存在的元素,还是一个第一次出现的元素 HyperLogLog 用来计数( 记录出当前集合中有多少个不同的元素),但是不能告诉你这些元素都是什么 HyperLogLog 存储元素的时候,提前特征的过程是不可逆的(信息量丢失了) 给你猪肉,可以做成火腿肠 但是给你火腿肠,不能还原成猪肉了 bitmaps (位图) 使用 bit 位来表示整数 位图本质上,就还是一个集合,属于是 set 类型针对整数的特化版本 为了节省空间 计算机进行位操作,一般都是比较高效的 HyperLogLog

    13200编辑于 2025-03-16
  • 来自专栏Flink实战剖析

    关于HyperLogLog去重优化

    1Flink去重第一弹: MapState去重 2Flink去重第二弹:SQL方式 3Flink去重第三弹:HyperLogLog去重 在HyperLogLog去重实现中,如果要求误差在0.001 实现代码: public class OptimizationHyperLogLog { //hyperloglog结构 private HyperLogLog hyperLogLog; ==null && currSize+1>bucket){ //升级为hyperloglog hyperLogLog=new HyperLogLog(rsd (); } if(hyperLogLog! ,不满足则直接添加到set中,满足则将set里面数据转移到hyperloglog对象中并且清空set, 后续数据将会被添加到hyperloglog中; 这种写法没有考虑并发情况,在实际使用情况中也不会存在并发问题

    41020编辑于 2022-04-18
  • 来自专栏代码洁癖患者

    走近源码:神奇的HyperLogLog

    HyperLogLog是Redis的高级数据结构,是统计基数的利器。 前文我们已经介绍过HyperLogLog的基本用法,如果只求会用,只需要掌握HyperLogLog的三个命令即可,如果想要更进一步了解HyperLogLog的原理以及源码实现,相信这篇文章会给你带来一些启发 在这种情况下,HyperLogLog将会出来拯救我们。 HyperLogLog原理 HyperLogLog实际上不会存储每个元素的值,它使用的是概率算法,通过存储元素的hash值的第一个1的位置,来计算元素数量。这么说不太容易理解,容我先搬出来一个栗子。 在这之前我们首先要了解的是HyperLogLog的头结构体和创建一个HyperLogLog对象的步骤。

    1.1K20发布于 2020-03-11
领券