缓存穿透怎么导致的?
在高并发下查询key不存在的数据,会穿过缓去存查询数据库。导致数据库压力过大而宕机。
解决方法:
- 对查询结果为空的情况也进行缓存,缓存时间(ttl)设置短一点,或者该key对应的数据insert了之后清理缓存。
缺点:缓存太多空值占用了更多的空间 - 使用布隆过滤器。在缓存之前在加一层布隆过滤器,在查询的时候先去布隆过滤器查询 key 是否存在,如果不存在就直接返回,存在再查缓存和DB。
布隆过滤器原理: 当一个元素被加入集合时,将这个元素通过n次Hash函数结果映射成一个数组中的n个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。总之布隆过滤器是一个很大二进制的位数组,数组里面只存0和1。
本文探讨了在高并发场景中,如何通过缓存穿透问题的出现机制,解释了其对数据库的影响,并提出了利用布隆过滤器作为预查机制来减轻数据库压力。讲解了布隆过滤器的工作原理及其在缓存策略中的应用,以及可能带来的空间占用问题。
8438

被折叠的 条评论
为什么被折叠?



