关闭

Redis教程(七) HyperLogLog类型

538人阅读 评论(0) 收藏 举报
分类:

 

 

Redis教程() HyperLogLog类型


1 Redis数据类型

Redis的键值可以支持数据类型:字符串,列表,散表,集合,有序集合、HyperLogLog,通过选用不同的数据结构,用户可以使用Redis解决各式各样的问题。


1.1 HyperLogLog类型

      Redis2.8.9版本添加了 HyperLogLog结构。

     基数:集合中不同元素的数量。比如 {'java', 'C#', 'ruby', 'C#', 'java'}的基数就是 3

     估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内。

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

 

1、PFADD命令:将任意数量的元素添加到指定的HyperLogLog里面。如果 HyperLogLog估计的近似基数(approximated cardinality)在命令执行之后出现了变化,那么命令返回 1否则返回 0如果命令执行时给定的键不存在,那么程序将先创建一个空的 HyperLogLog结构,然后再执行命令。

     PFADD  address"/user/recharge"

     PFADD  address"/user/findpassword"

         PFADD  address"/user/rechargeSuccess" "/user/rechargefail"

         PFADD address "/user/zijinliushui" "/user/myinvitation""/user/myrewards"


 

2、PFCOUNT命令:命令作用于单个键时,返回储存在给定键的 HyperLogLog的近似基数,如果键不存在,那么返回 0。命令作用于多个键时,返回所有给定 HyperLogLog的并集的近似基数,这个近似基数是通过将所有给定 HyperLogLog合并至一个临时HyperLogLog来计算得出的。

PFCOUNT address


 

3、PFMERGE命令:将多个 HyperLogLog 合并(merge)为一个 HyperLogLog 合并后的 HyperLogLog的基数接近于所有输入HyperLogLog的可见集合(observed set)的并集。合并得出的 HyperLogLog 会被储存在 destkey键里面,如果该键并不存在,那么命令在执行之前,会先为该键创建一个空的 HyperLogLog

 PFADD ip_address "202.120.111.146"

 PFADD ip_address "202.192.047.188""202.196.255.196"

 PFADD ip_address "202.198.159.156""202.046.255.125"

 PFADD ip_address "202.065.159.243""202.046.255.125"

 PFMERGE mergekey address ip_address

 PFCOUNT mergekey


 

 

                --以上为《Redis教程(七) HyperLogLog类型》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


1
0
查看评论

Redis 基数统计:HyperLogLog 小内存大用处

我们一直都知道,redis几大常用数据结构,字符串、散列、列表、集合、有序集合。其实后来Redis做了很多补充,其中之一就是HyperLogLog,另外的还有GEO(地理位置),是3.2版本加的。 这里我们就来简单介绍下HyperLogLog结构。 先说用处:这个结构可以非常省内存的去统...
  • azhegps
  • azhegps
  • 2017-05-04 10:46
  • 391

Redis源码剖析--基数统计hyperloglog

Redis中hyperloglog是用来做基数统计的,其优点是:在输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定的,并且是很小的。在Redis里面,每个Hyperloglog键只需要12Kb的大小就能计算接近2^64个不同元素的基数,但是hyperloglog只会根据输入元素来计...
  • terence1212
  • terence1212
  • 2016-12-09 20:10
  • 1525

Redis学习记录之命令HyperLogLog(十四)

说明:HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基...
  • qq_32347977
  • qq_32347977
  • 2016-01-14 14:14
  • 1563

redis中HyperLogLogs使用介绍

A HyperLogLog is a probabilistic data structure used in order to count unique things (technically this is referred to estimating the cardinality of a...
  • zhang197093
  • zhang197093
  • 2017-06-06 16:12
  • 1108

[转]高压缩空间占用的 Hyper LogLog 算法

Big Data Counting: How To Count A Billion Distinct Objects Using Only 1.5KThis is a guest post by Matt Abrams (@abramsm), from Clearspring, discussing...
  • heiyeshuwu
  • heiyeshuwu
  • 2014-11-18 16:16
  • 19425

redis HyperLogLogs(译文)

原文链接请猛戳这里HyperLogLog(HLL)是一种基于概率的数据结构,用于统计集合中不同元素的个数。通常要完成这项工作所需的内存大小与集合中不同元素的个数成正比。不过,有一种使用精度换取空间的做法,也就是使用较小的内存完成工作,但得到的结果会有一定误差。对于reids来说,这个误差小于1%。这...
  • qmhball
  • qmhball
  • 2016-09-13 11:56
  • 1382

Redis HyperLogLog 统计计相同数量的独立 元素

如果我们要实现记录网站每天访问的独立IP数量这样的一个功能 集合实现: 使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP , 然后通过调用 SCARD 命令来得出独立 IP 的数量。 举个例子,程序可以使用以下代码来记录 201...
  • xx123698
  • xx123698
  • 2016-12-01 14:17
  • 301

Redis源码分析(二十六)--- slowLog和hyperloglog

今天学习的是是2个log的文件,2个文件的实现功能都超出我原本理解的意思。开始时我以为就是记录不同的类型的日志,后来才慢慢的明白了额,slowLog记录的是超时的查询记录,而hyperloglog其实跟日志一点关系都没有,好吧,我再一次傻眼了,他其实是一种基数统计算法,应该分开了看,hyper + ...
  • Androidlushangderen
  • Androidlushangderen
  • 2014-11-01 19:49
  • 7009

Spring RedisTemplate操作-HyperLogLog操作

package com.panku.web.redis; import java.util.Collection; import java.util.Set; import javax.annotation.Resource; import org.junit.Test; impo...
  • spring_show
  • spring_show
  • 2017-09-20 09:03
  • 242

神奇的HyperLogLog算法【转载 #涉及到数学原理】

原文链接:http://rainybowe.com/blog/2017/07/13/%E7%A5%9E%E5%A5%87%E7%9A%84HyperLogLog%E7%AE%97%E6%B3%95/index.html?utm_source=tuicool&utm_medium=referr...
  • firenet1
  • firenet1
  • 2017-08-16 14:47
  • 1664
    个人资料
    • 访问:223767次
    • 积分:3073
    • 等级:
    • 排名:第13489名
    • 原创:91篇
    • 转载:2篇
    • 译文:0篇
    • 评论:38条
    最新评论