REDIS HYPERLOGLOG 技术教程文章

redis hyperloglog【代码】【图】

Redis 在 2.8.9 版本添加了 HyperLogLog 结构 Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不...

redis 学习(14)-- HyperLogLog【图】

HyperLogLog 什么是 HyperLogLog HyperLogLog 是基于 HyperLogLog 算法的一种数据结构,该算法可以在极小空间完成独立数量统计。 在本质上还是字符串类型。重要 API命令 含义pfadd key element1 [element2...] 向HyperLogLog中添加元素pfcount key1 [key2...] 计算HyperLogLog的独立总数pfmerge destKey key1 [key2...] 合并多个hyperLogLog到destKey中演示内存消耗 以百万独立用户为例 elements = "" key = "2019_06_02:unique:id...

Redis 集合统计(HyperLogLog)【代码】

统计功能是一类极为常见的需求,比如下面这个场景:为了决定某个功能是否在下个迭代版本中保留,产品会要求统计页面在上新前后的 UV 作为决策依据。 简单来说就是统计一天内,某个页面的访问用户量,如果相同的用户再次访问,也只算记为一次访问。下面我们将从这个场景出发,讨论如何选择的合适的 Redis 数据结构实现统计功能。 Redis与统计 聚合统计 要完成这个统计任务,最直观的方式是使用一个SET保存页面在某天的访问用户 ID,...

Redis之HyperLoglog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像...

高可用Redis(六):瑞士军刀之bitmap,HyperLoglog和GEO【代码】【图】

1.bitmap位图 1.1 bitmap位图的概念 首先来看一个例子,字符串big, 字母b的ASCII码为98,转换成二进制为 01100010 字母i的ASCII码为105,转换成二进制为 01101001 字母g的ASCII码为103,转换成二进制为 01100111 如果在Redis中,设置一个key,其值为big,此时可以get到big这个值,也可以获取到 big的ASCII码每一个位对应的值,也就是0或1 例如: 127.0.0.1:6379> set hello big OK 127.0.0.1:6379> getbit hello 0 # b的二进...

Redis HyperLogLog

原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11632490.html 背景 统计网站上每个网页每天的UV数据,UV和PV不一样,需要去重,同一个用户一天之内的多次访问请求只能计数一次。 Set方案 一个简单的方案,那就是为每一个页面设置一个独立的set集合来存储当天访问过此页面的用户ID。当一个请求过来时,使用sadd将用户ID塞进去就可以了。通过scard可以取出这个集合的大小,这个数字就是这个页面的UV数据。 但是,如...

Redisnewdatastructure:theHyperLogLog

Generally speaking, I love randomized algorithms, but there is one I love particularly since even after you understand how it works, it still remains magical from a programmer point of view. It accomplishes something that is almost illogicGenerally speaking, I love randomized algorithms, but there is one I love particularly since even after you understand how it works, it still remains magical fro...

80.redis:三种特殊数据类型:Geospatial,Hyperloglog,Bitmaps【代码】【图】

目录 一、geospatial:地理位置 (1)添加地理位置:geoadd (2)查询某个值的地理位置:geopos (3)返回两个地址之间的距离:geodist (4)某个经纬度为中心,一个范围内查找:georadius (5)以某个城市为中心,一个范围内查找:georadiusbymember (6)将经纬度转换成一个字符串返回:geohash (7)删除一个经纬度:zrem 二、Hyperloglog:统计基数 (1)新增一个统计列表:pfadd (2)查看统计列表数量:pfcount (3)合并两个...

Redis HyperLogLog数据结构【图】

Redis HyperLogLog HyperLogLog一般用作基数统计,如统计网站访问量,视频播放量啊等。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 HyperLogLog怎么实现的 HyperLogLog只需要花费12kb,就可以计算这么多基数。很明显,不是通过直接存储元素值比较实现的。那么既然不存储元素,是否这种存储方式也有误差呢? 查...

Redis系统学习之三种特殊数据类型(hyperloglog(基数统计))【图】

hyperloglog(基数统计) 简述 Redis 在 2.8.9 版本添加了 HyperLogLog 结构。 Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大 时,计算基数所需的空间总是固定 的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计 算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为 HyperLogLog ...

Redis——三种特殊数据类型 Geospatial Hyperloglog Bitmaps【代码】【图】

Redis三种特殊数据类型 BitmapsBitmaps类型的基础操作应用案例 HyperloglogHyperLogLog类型的基本操作 GeospatialGEO类型的基本操作Bitmaps Bitmaps这个数据结构可以实现对位的操作。Bitmaps实际上就是字符串,但是它可以对字符串的位进行操作。 可以把Bitmaps想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量。单个bitmaps的最大长度是512MB,即2^32个比特位。 详细可以参考大佬写的 Bi...

redis6.0.5之HyperLogLog阅读笔记3-基数估算实现之辅助函数【代码】

/* ========================= HyperLogLog algorithm ========================= *//* Our hash function is MurmurHash2, 64 bit version.* It was modified for Redis in order to provide the same result in* big and little endian archs (endian neutral). */ 我们的hash函数用的是64位版本的MurmurHash2。 Redis使用时为了在大端和小端的结构中提供更好的结果修改了该算法uint64_t MurmurHash64A (const void * key, int ...

Redis实战篇:基于HyperLogLog实现UV统计功能

如果现在要开发一个功能:统计APP或网页的一个页面,每天有多少用户点击进入的次数。同一个用户的反复点击进入记为 1 次,也就是统计 UV 数据。让你来开发这个统计模块,你会如何实现? 如果统计 PV 数据,只要给网页一个独立的 Redis 计数器就可以了,这个计数器的 key 的格式为 puv:{pid}:{yyyyMMdd}。每来一个请求就 incrby 一次,就可以统计出所有的 PV 数据。 但是 UV 不一样,它要去重,同一个用户一天之内的多次访问请求只能...

redis6.0.5之HyperLogLog阅读笔记1-基数估算前言翻译【代码】

/* The Redis HyperLogLog implementation is based on the following ideas: Redis的超对数实现是基于以下的想法:* * The use of a 64 bit hash function as proposed in [1], in order to dont* limited to cardinalities up to 10^9, at the cost of just 1 additional* bit per register. 使用文1推荐的64位的哈希函数,仅用对每个寄存器增加一个比特的代价,就可以突破基数个数10的9次方的限制。* * The use of 16384 6-...

一步一步学习Redis——HyperLogLog的相关命令【代码】【图】

文章目录: 1.开篇 2.Redis HyperLogLog的相关命令 2.1 PFADD命令 语法 返回值 2.2 PFCOUNT命令 语法 返回值 2.3 PFMERGE命令 语法 返回值1.开篇Redis 在 2.8.9 版本添加了 HyperLogLog 结构。 Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2...

Redis Hyperloglog基数统计【代码】【图】

基数:不重复的元素 Redis Hyperloglog:用于做基数统计的算法 优点:占用的内容是固定的,2^64不同的元素的技术,只需要占用12kb内存!如果要从内存角度来比较的话Hyperloglog首选。 hyper log log命令以"pf"开头。 1.利用pfadd命令添加127.0.0.1:6379> pfadd mykey a b c d e f g h i j (integer) 1 127.0.0.1:6379> 2.利用pfcount 命令统计元素的基数数量127.0.0.1:6379> pfcount mykey (integer) 10 127.0.0.1:6379> ...

「进击Redis」十五、奇妙的 Redis HyperLogLog【代码】【图】

前言好哥哥们,接上篇Redis Bitmaps 你会了吗 。正如标题,Bitmaps 好哥哥会了吗?什么,还没看吗,那别愣着呀,赶紧看看哦。看完记得点赞加关注。讲道理应该是讲清楚了吧,Bitmaps在大数据量上的场景运用的还是挺多的(没接触过大数据量的我流下了悔恨的泪水),今天HyperLogLog 这玩意也是常用于大数据量下的基数统计,不过我又没有用过,找个机会在现在的项目用用,顺便挖点坑(手动狗头保命)。 概述 首先HyperLogLog 并不是一...

Redis(十):Redis特殊类型之Hyperloglog基数统计【代码】

redis 2.8.9版本就更新了Hyperloglog数据结构! Hyperloglog:基数统计算法!0.81%的错误率,不过统计大量数据可以忽略! 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。 1、...

Redis系列(三):Bitmaps和HyperLogLog【代码】

本篇介绍Bitmaps和HyperLogLog。 一、Bitmaps 计算机中最小的单位是bit(位),很多计算机语言也提供了位操作符,比如Java中就有&、|、>>、>>>、<<、~、^ 。1bit可以存储0和1两种值。介绍几个Redis的Bitmaps相关的操作bitop完整的命令参数是bitop operation destkey key [key...] 其中operation是位操作类型,支持and、or、not、xor,分别就是与、或、非、异或。destkey是用来存储计算结果的变量,key是参与运算是变量,可以指定多...

Redis Geo HyperLogLog类型介绍【代码】

?Geo类型 Redis3.2.0版本推出 可以将用户给定的地理位置信息存储起来,并对这些信息进行操作 GEOADD key longitude latitude member [longitude latitude member ...] //在使用排序集表示的地理空间索引中添加一个或多个地理空间项,时间复杂度O(log(N)) 127.0.0.1:6379> geoadd key1 121.3996887207031 31.04559326171875 member1 116.3883056640625 39.92889404296875 member2 (integer) 2GEODIST key member1 member2 [unit] //...