目录
布隆过滤器是一种数据结构,利用极小的内存,可以判断大量的数据“一定不存在或者可能存在”。
对于缓存击穿,我们可以将查询的数据条件都哈希到一个足够大的布隆过滤器中,用户发送的请求会先被布隆过滤器拦截,一定不存在的数据就直接拦截返回了,从而避免下一步对数据库的压力。
插入查询
删除
时间复杂度
O(K), K为哈希函数的个数,每个哈希函数是O(1).
一维数组中存储二进制数据(0 1),通过哈希->数组下标->插入、查询数据(1)。
缺点
误删
误判
代码实现
误判率越小,计算时间越长
不同的哈希函数对应的哈希算法不同,误判率越低,所需的哈希函数越多,所需的一维数组内存大小也越大。
布隆过滤器防止redis缓存穿透
前端请求查询一个数据,但是redis中没有这个数据,那这个请求就会穿过redis,直接去数据库中查询,这样就会导致前端请求直接打到数据库上,如果数据库承受不了这么大的请求,就会挂掉。
redis没有拦截住这个请求,
redis只能缓存一部分数据,数据不在redis有可能在数据库,布隆过滤器保存了全部的数据,数据不在布隆过滤器就大概率不在数据库。这样当有大量不在数据库里的查询时就不用再查数据库了,没有布隆过滤器的话就是先查redis再查数据库,但是这些数据都不在redis里,所以每次都要查数据库,这种情况相当于缓存失效了,所以叫缓存穿透。
布隆过滤器:可以保证查询不在的数据(return false),就一定不在!查询在的数据(return false),不一定在!
单机redis
redis集群