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类型》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。
——厚积薄发(yuanxw)