【背景】
线上redis出现慢查询,主要是因为用户分组功能导致,该分组同时运行50个,每个用户分组用户数量不同,小的上千大的六百万。
【解决方案】
1.采用Redission BloomFlter布隆过滤器实现
【方案实现】
1. 业务系统:
1. 定义同步接口,从mysql中把设备分组加入到redis布隆过滤器
2. C端接口:
2.1 启动程序时,初始化Redission BloomFlter
2.2 直接使用布隆过滤器,判断设备是否在分组内,此时走redis的bitmap命令。
【验收标准】
1.功能测试
- 用户分组功能正常,包含/排除
- 误判率测试,程序设置误判率0.01,1W个设备中出现多少个误判
2.性能测试
- 接口性能优良
- redis 指标正常
【技术参数】
1.布隆过滤器压缩比例
【压测结论】
1. Redission实现布隆过滤器,判断元素是否存在,都会执行多次bitget命令
2. bloomFilter.count()非常消耗redis cpu,使得redis cpu 100%
3. bloomFilter.contains()消耗redis cpu,使得redis cpu 20%-30%
4. 接口并发可达到qps=8000,redis执行bitget命令次数8W-10W
5. 该方式是否安全使用,待线上验证!!!风险:redis的cpu情况