1. 电商系统架构
- 每个页面URL对应具体内容,下图url中857即为商品编号
- 架构
用户发起请求,应用会通过redis查询缓存数据,如果redis中没有缓存数据,程序会去数据库中查询并添加至redis
长时间数据积累后,redis缓存数据如下图:
- 当前设计存在不足(缓存穿透)
缓存穿透攻击是指恶意用户在短时间内大量查询不存在的数据,导致大量请求被送达数据库进行查询,当请求数量超过数据库最大负载时,使系统响应出现高延迟甚至瘫痪的攻击行为
批量查询数据库中不存在的数据,会绕过redis,进入数据库 对系统性能造成影响甚至崩溃
2. 如何预防缓存穿透?布隆过滤器(BloomFilter)
布隆过滤器(Bloom Filter)是1970年由巴顿.布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
布隆过滤器所有哈希位的值都为1,则代表数据可能存在、某一位的值为0则一定不存在
3. 减少误判
- 增加Hash次数
- 增加二进制数组位
4. 布隆过滤器使用流程
商品被删除了怎么办?
布隆过滤器因为某一位二进制可能被多个编号的Hash引用,因此布隆过滤器无法直接处理删除数据的情况
解决方案:
- 定时异步重建布隆过滤器
- 计数Bloom Filter