数据结构
Redis无论什么数据类型,存储的时候都是以键值对key-value形势存储,并且所有的key都是String类型,本文讨论的数据类型是value的数据类型。
Hyperloglog
概述:Hyperloglog数据类型是Redis 2.8.9版本引入的,是用来做数据基数计算的,因为做基数计算,不保存原始数据,故占用内存很少,但有一定的误差,标准是误差0.81%,适用于对数据准确度要求不是函告的场景。
什么是基数?
基数就是元素不重复的个数,比如有数据集合{1,2,4,2,5,6,5},去重后{1,2,4,5,6},所以他的基数是5。
Redis 计算基数一般有三种方式,分别是使用 hashmap、bitmap 和 hyperloglog,hashmap、bitmap在数据量非常大时,所消耗的内存会大大增加,但是 hyperloglog 则不会,hyperloglog一个key最多占用12K空间。
Hyperloglog常用命令:
命令 | 描述 |
---|---|
pfadd key element | 添加元素到Hyperloglog中 |
pfcount key | 返回Hyperloglog的基数值 |
pfmerge destkey sourcekey [sourcekey …] | 将多个 HyperLogLog 合并到一个HyperLogLog,sourcekey [sourcekey …]多个key, 结果保存在desKey中 |
Hyperloglog的特点:
- 只做基数计算,不记录原数据。
- 内存占用很小,一个key最多占用12K空间(因为不存储原始数据)。
- 提供不精装的基数计算,标准是误差0.81%。
Hyperloglog的应用场景:
- 统计网站注册IP数。
- 统计每日访问IP数。
- 统计页面实时UV PV数。
- 统计在线人数。
总结:Hyperloglog在实际项目中,使用不是很多,其本身就有误差,在数量级不够的场景,基本不会使用,但是可以容忍一定误差且数据量非常大的时候,还是十分有优势的,毕竟其内存占用小。
如有不正确的地方请各位指出纠正。