Bitmap和HyperLogLog
2021/10/16 17:12:11
本文主要是介绍Bitmap和HyperLogLog,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Bitmap(位存储)
概念:Bitmap即位图数据结构,都是操作二进制位来进行记录,只有0 和 1 两个状态。
例如 11001001,表示的是[1,2,5,8],Bitmap中1的个数就是基数。
Bitmap的长度和集合中元素的个数无关,而是与基数的上限有关。假如要计算上限为1亿的基数,则需要12.5M字节的Bitmap,就算集合中只有10个元素也需要12.5M。计算内存的方法:100000000/8/1024/1024 ≈ 12.5M。但是如果需要统计1000个对象,就需要大约12G的内存。
Bitmap也可以轻松合并多个集合,只需要将多个数组进行异或操作就可以。
常用命令
命令 | 简述 | 使用 |
---|---|---|
setbit | 设置位图的index位为status(1或0) | setbit bitmap index status |
getbit | 获取位图的index位状态 | getbit bitmap index |
bitcount | 统计位图1 的个数 | bitcount bitmap |
应用场景
比如:统计用户信息,活跃、不活跃!登录、未登录!打卡、未打卡!两个状态的,都可以使用BitMap。
如果存储一年的打卡状态需要多少内存呢?365 天 = 365 bit 1 字节 = 8 bit ,46个字节左右。
HyperLogLog(基数统计)
一个大型的网站,每天IP比如有100万,粗算一个IP消耗15字节,那么100万个IP就是15M。而HyperLogLog在Redis中每个键占用的内容都是12K,理论存储近似接近264个值,不管存储的内容是什么,他是一个基于基数估算的算法, 只能比较准确的估算出基数,可以使用少量固定的内存去存储并识别集合中的唯一元素。而且这个估算的基数并不一定准确,是一个带有0.81%标准错误的近似值。
常用命令
命令 | 简述 | 使用 |
---|---|---|
pfadd | 添加指定元素到 HyperLogLog 中 | pfadd key element [element...] |
pfcount | 返回给定 HyperLogLog 的基数估算值 | pfcount key |
pfmerge | 将多个 HyperLogLog 合并为一个 HyperLogLog | pfmerge destkey sourcekey [sourcekey ...] |
应用场景
- 统计各种计数。比如注册IP数、每日访问IP数、页面实时UV、在线用户数、共同好友数等。
这篇关于Bitmap和HyperLogLog的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南