蓝盟IT小贴士,来喽!
看看这张图。 用户有可能询问了条件错误的问题。 在这种情况下redis不存在。 按照通常的流程去找数据库,但这是错误的条件的询问,数据库当然不存在。 不会向redis写值,也不会向用户返回空。 这样的操作一次两次就行,但次数多得不得了。 发出redis本来是为了减轻数据库的压力。现在,redis形状相似,每次都去找数据库。 这被称为高速缓存通过,相当于redis不存在了,被破坏了。 为了解决这种情况,可以在redis中缓存空字符串或特殊字符串。 例如,下次询问redis时,您不会询问能知道收到的值是空的还是不在数据库中的数据库。 ps :如果缓存中不存在密钥,请务必设置过期日期。 否则,如果此记录被添加到数据库中,高速缓存和数据库将不匹配
这是反复查询相同不存在的值的情况下,每次应用查询时不存在的值不一样吗?即使你每次缓存特殊的字符串,其值也不同。 例如,我们的数据库用户id增加到111、112、113、114,但是如果别人攻击你,故意带着-100、-936、-545这种混乱的键询问,就不存在redis和数据库这一值。 别人每次拿的钥匙也不一样,你缓存也没用。 此时,数据库的压力相当大。 比这种情况更可怕。 怎么办才好呢? 此时,我们今天的主角布鲁姆过滤器登场。 的双曲馀弦值。
我们进行散列函数计算后,可以找到是否存在于适当的位置,并且看到红线,24和147通过散列函数获得的散列值相同,这被称为散列冲突(hash-color )或散列冲突(hash-color )。 散列冲突是不可避免的。 我们能做的就是降低散列冲突的概率。 第一,可以扩大维度阵列的长度和位图容量。 由于我们的函数分布均匀,所以位图容量越大,在相同位置发生散列冲突的概率就越小。 但是,位图的容量越大,就意味着消耗的内存越多,所以请考虑能否用其他方法来解决。 第二种方法,经过几个散列函数的计算,你认为24和147发生了冲突,经过这次的计算。 我经过5次、10次、100次计算也能碰撞是缘分。 你们可以在一起,但并不是越多次计算散列函数就越好。 马上填补位图,计算需要时间,所以需要求出时间和空间的平衡。 的双曲馀弦值。
文/上海蓝盟 IT外包专家