后端开发
未读Redis缓存相关解决方案缓存穿透什么是缓存穿透?缓存穿透是指用户请求的数据在缓存中没有命中,同时在数据库也不存在,导致用户的每一次请求都要去数据库中查一遍,然后返回为空。
如果有恶意攻击者不断请求不存在的数据,会导致大量的请求落在数据库上,造成数据库压力过大,甚至击垮数据库。
解决方案
布隆过滤器
布隆过滤器专门用来检测集合中是否存在特定的元素。
布隆过滤器由一个长度为m比特的位数组(bit array)与k个哈希函数(hash function)组成的数据结构。位数组初始化均为0,所有的哈希函数都可以分别把输入数据尽量均匀地散列。
当要向布隆过滤器中插入一个元素时,该元素经过k个哈希函数计算产生k个哈希值,以哈希值作为位数组中的下标,将所有k个对应的比特值由0置为1。
当要查询一个元素时,同样将其经过哈希函数计算产生哈希值,然后检查对应的k个比特值:如果有任意一个比特为0,表明该元素一定不在集合中;如果所有比特均为1,表明该集合有可能性在集合中。为什么不是一定在集合中呢?因为不同的元素计算的哈希值有可能一样,会出现哈希碰撞,导致一个不存在的元素有可能对应的比特位为1,这就是所谓“ ...