作用:预防缓存穿透
服务器接口遭到恶意攻击,大量查询缓存中没有的数据,流量打到数据库,造成数据库故障。
布隆过滤器
布隆过滤器就是一个n位的二进制数组,利用多组哈希,将数据库中存在的数据在二进制数组中映射出来。
每组哈希会得到二进制数组的一个下标,所有下标都为1,则该数据可能存在,否则一定不存在。
请求过来,先进行哈希,去布隆过滤器验证该数据是否存在,这样可以在缓存层避免掉绝大部分穿透查询。
布隆过滤器存在误差。因为每个二进制位表示多个数据,因此,可以通过增加数组长度或者增加哈希次数来减小误差,但同时会带来CPU负载。建议误差范围在1%。
删除数据
删除数据时如何维护布隆过滤器。由于每个二进制位代表多个数据,因此不能直接删除掉某位。一般有两种处理办法
- 定时异步重建布隆过滤器。比如每四个小时,在另一台服务器上重新生成过滤器,然后替代当前正在工作的过滤器。
- 技术布隆过滤器。在每一位上再附加一个被引用次数的数据。删除数据时,该二进制位没有被引用,则置0.