在平常高并发的系统中,大量的请求同时查询同一个 key 时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。这种现象我们称为缓存击穿,会造成某一时刻数据库请求量过大,压力剧增。
是指缓存和数据库中都没有某个数据的情况下(数据库中不存在),而用户不断发起查询请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,该攻击会导致数据库压力急速增大。
元素加入布隆过滤器:
使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)根据得到的哈希值,在位数组中把对应下标的值置为 1判断一个元素是否存在于布隆过滤器:
对给定元素再次进行相同的哈希计算;得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值很大概率(可能不存在,概率很低)存在于布隆过滤器中;如果存在一个值不为 1,说明该元素一定不在布隆过滤器中是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。
和缓存击穿不同的是:缓存击穿指并发查同一个key;缓存雪崩是大量不同的key过期了,很多数据都查不到从而查数据库。