redis 的 HyperLogLog】的更多相关文章

首先,HyperLogLog与布隆过滤器都是针对大数据统计存储应用场景下的知名算法. HyperLogLog是在大数据的情况下关于数据基数的空间复杂度优化实现,布隆过滤器是在大数据情况下关于检索一个元素是否在一个集合中的空间复杂度优化后的实现. 在传统的数据量比较低的应用服务中,我们要实现数据基数和数据是否存在分析的功能,通常是简单的把所有数据存储下来,直接count一下就是基数了,而直接检索一个元素是否在一个集合中也很简单. 但随着数据量的急剧增大,传统的方式已经很难达到工程上的需求.过大的数…
如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现? 如果统计 PV 那非常好办,给每个网页一个独立的 Redis 计数器就可以了,这个计数器的 key 后缀加上当天的日期.这样来一个请求,incrby 一次,最终就可以统计出所有的 PV 数据. 但是 UV 不一样,它要去重,同一个用户一天之内的多次访问请求只能计数一次.这就要求每一个网页请求都需要带上用户的 ID,无论是登陆用户还是未登陆用户都需要一个唯一 ID 来…
#coding:utf8 import redis # python 操作redis之——HyperLogLog r =redis.Redis(host=") # 1.Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中. ") #输出结果是1 ") #输出结果是1 ") #输出结果是1 # 2. Pfcount 命令返回给定 HyperLogLog 的基数估算值. ") #输出结果是5, 因为 4 重复了两次 ") #输出结…
什么是基数估算 HyperLogLog 是一种基数估算算法.所谓基数估算,就是估算在一批数据中,不重复元素的个数有多少. 从数学上来说,基数估计这个问题的详细描述是:对于一个数据流 {x1,x2,...,xs} 而言,它可能存在重复的元素,用 n 来表示这个数据流的不同元素的个数,并且这个集合可以表示为{e1,...,en}.目标是:使用 m 这个量级的存储单位,可以得到 n 的估计值,其中 m<<n .并且估计值和实际值 n 的误差是可以控制的. 对于上面这个问题,如果是想得到精确的基数,可…
如果我们要实现记录网站每天访问的独立IP数量这样的一个功能 集合实现: 使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP ,然后通过调用 SCARD 命令来得出独立 IP 的数量.举个例子,程序可以使用以下代码来记录 2014 年 8 月 15 日,每个网站访客的 IP :ip = get_vistor_ip()SADD '2014.8.15::unique::ip' ip然后使用以下代码来获得当天的唯一 IP 数量:SCARD '2014.8.1…
Redis 在 2.8.9 版本添加了 HyperLogLog 结构. Redis HyperLogLog 是用来做基数统计的算法 HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的.并且是很小的 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身 基本命令 1. Pfadd 将所有元素参数添加到 HyperLogLog 数据结构中 PFADD key-name  element [element ...] 如果至少有个…
HyperLogLog数据结构简单介绍 能够看http://www.cnblogs.com/ysuzhaixuefei/p/4052110.html  博客,介绍的相对照较清晰. HyperLogLog数据结构,能够接收多个參数输入.然后估算出元素的基数. • 基数:集合中不同元素的数量.比方 {'apple', 'banana', 'cherry', 'banana', 'apple'} 的基数就是 3 .     • 估算值:算法给出的基数并非精确的,可能会比实际略微多一些或者略微少一些,但…
​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.3883056…
HyperLogLog 提供不精确的去重计数方案,虽然不精确但是也不是非常不精确,标准误差是 0.81%. 使用方法 HyperLogLog 提供了两个指令 pfadd 和 pfcount,根据字面意义很好理解,一个是增加计数,一个是获取计数. 127.0.0.1:6379> pfadd codehole user1(integer) 1127.0.0.1:6379> pfcount codehole(integer) 1127.0.0.1:6379> pfadd codehole us…
前提 未来一段时间开发的项目或者需求会大量使用到Redis,趁着这段时间业务并不太繁忙,抽点时间预习和复习Redis的相关内容.刚好看到博客下面的UV和PV统计,想到了最近看书里面提到的HyperLogLog数据类型,于是花点时间分析一下它的使用方式和使用场景(暂时不探究HyperLogLog的实现原理).Redis中HyperLogLog数据类型是Redid 2.8.9引入的,使用的时候确保Redis版本>= 2.8.9. HyperLogLog简介 基数计数(cardinality coun…