1个bit位保存一个数据
数组的下标表示具体数据;bit的值只能是1或者0;1表示存在,0表示不存在
- 快速查询
- 快速去重
- 快速排序
可以使用的业务
- 黑白名单类
如各种业务检查用户id、请求ip是否在黑白名单中。
42亿的数据只需要:(2^32 * 4) / 32 / 1024 / 1024 = 512MB
那么机器就算 8核16G的基础配置也是能够全量加载这部分数据,并进行 O(1)
时间复杂度的查询。并且还可以根据hash,让固定业务请求打到指定机器,那么每台机器可只加载自己的数据到内存即可。
- 用户签到
每个用户开一个bitmap,保存一年每天的记录。每天占用1位
(365 * 4) / 32 = 45.625KB 全年用户占用空间
- 资源是否使用
经常会有检查某个资源是否使用了,比如:用户是否在线;原理与黑白名单类似