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

在App登录场景中,通过布隆过滤器检测账号和设备号的活跃比例,以实现性能和存储的平衡。布隆过滤器允许一定误判率,适用于不需精确数据的业务。Guava提供了本地实现,但分布式场景下可借助redis,如redisbloom插件、bitmap或Redisson来实现分布式布隆过滤器。
最低0.47元/天 解锁文章
167万+

被折叠的 条评论
为什么被折叠?



