在一个 App 的登录场景中,有两个重要信息:账号和设备号
设备号标识一个被安装的 App,在 App 安装时生成,如果卸载了重新安装则会生成新的设备号。
假设有个需求,需要检测一个时间窗口内活跃账号和设备比是否正常,如果不在合理范围内则告警提醒。
一般的方案有下面两种:
方案 | 特点 |
内存set | 优点:性能好,缺点:存储数据有限 |
数据库 | 优点:可以存储更多数据,缺点:性能相对差,需要维护数据的清除逻辑 |
这两种方案各有其优缺点。
那么,如果我既追求性能,又追求存储更多的数据,有办法嘛
于是布隆过滤器就派上用场了。
布隆过滤器的使用也是将数据存储到内存,同时又可以对数据进行压缩,所以能够在保证性能的同时,存储更多的数据。
前提是能容忍一定程度的误判率,而刚好多数业务场景的却不需要那么精准的数据。
如果想在本地内存里维护布隆过滤器,可以使用Guava的实现。
BloomFilter<CharSequence> bloomFilter = Bloo