Redis教程(七) HyperLogLog类型

来源:互联网 发布:免id下载软件 编辑:程序博客网 时间:2024/05/13 18:44


Redis教程(七) HyperLogLog类型


1 Redis数据类型

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


1.1 HyperLogLog类型

      Redis在2.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类型


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

0 0
原创粉丝点击