应用4:四两拨千斤 —— HyperLogLog

1.场景:需要统计一个网页的一天的访问量,同一个用户一天之内的多次访问请求只能计数一次

解决办法:为每一个页面一个独立的  set  集合来存储所有当天访问过此页面的用户  ID

缺陷:页面访问量非常大,使用一个很大的  set  集合来统计,这就非常浪费空间。如果这样的页面很多,那所需要的存储空间是惊人的

引入:Redis 提供了  HyperLogLog  数据结构就是用来解决这种统计问题的。HyperLogLog  提供不精确去重计数方案,虽然不精确但是也不是非常不精确,标准误差是  0.81%

2.HyperLogLog使用方法

(1)两个指令pfadd 增加计数pfcount 获取计数

(2)pfmerge,用于将多个pf 计数值累加在一起形成一个新的pf值

场景:网站中我们有两个内容差不多的页面,运营说需要这两个页面的访问量进行合并。pfmerge就可以派上用场了

127.0.0.1:6379> pfadd codehole user1

(integer) 1

127.0.0.1:6379> pfcount codehole

(integer) 1

127.0.0.1:6379> pfadd codehole user2

(integer) 1

127.0.0.1:6379> pfcount codehole

(integer) 2

127.0.0.1:6379> pfadd codehole user3

(integer) 1

127.0.0.1:6379> pfcount codehole

(integer) 3

127.0.0.1:6379> pfadd codehole user4 user5 user6 user7

(integer) 1

127.0.0.1:6379> pfcount codehole

(integer) 7

3.注意事项

HyperLogLog需要占据12k的存储空间,所以它不适合统计单个用户相关的数据。如果你的用户上亿,可以算算,这个空间成本是非常惊人的。但和set方案相比确真的是四两与千斤的比较。

redis对HyperLogLog的存储优化

在计数比较小时,它的存储空间采用稀疏矩阵存储,空间占用很小,仅仅在计数慢慢变大,稀疏矩阵占用空间渐渐超过了阈值时才会一次性转变成稠密矩阵,才会占用  12k 的空间

以上为学习《Redis深度历险核心原理和应用实践》笔记 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值