缓存穿透常见的解决方案如下:
解决方案1: 还为数据库中不存在的数据在缓存中设置默认值Null。为了避免占用资源,过期时间一般较短。
解决方案2:可以设置一些过滤规则,比如Bloom filter

方案1比较简单,但也很容易破解。例如,如果攻击者分析数据格式并反复请求数据库中不存在该数据,那么选项1将无效。相对来说,方案2更加稳定,接下来重点讲解方案2如何实现。
方案2的设计思路是在数据库查询之前设置过滤规则来过滤数据。如果发现数据不存在,则不再进行数据库查询,从而减轻数据库的访问压力。
目前方案2中过滤规则的主流载体之一是布隆过滤器。布隆过滤器是一种概率数据结构,其特点是高效的插入和查询,可以用来告诉你“某物一定不存在”或者可能存在”。

与List、Set、Map等传统数据结构相比,布隆过滤器是位数组,效率更高,占用空间更少。然而,缺点是返回的结果是概率性的,而不是精确的。
如果我们要将一个值映射到布隆过滤器中,我们需要使用多个不同的哈希函数来生成多个哈希值,并将每个生成的哈希值指向的位位置设置为1,例如对于值“zhangsan”三个不同的哈希函数分别生成哈希值1、4、7。
我们现在存储另一个值“lisi”。如果哈希函数返回4, 5, 8,则图继续变为:

当我们想要判断布隆过滤器是否记录了某个数据时,布隆过滤器首先会对该数据进行同样的哈希处理。例如“wangwu”的哈希函数返回2、5、8。值。结果我们发现第2位的值为0,也就是说没有值映射到该位,所以我们可以肯定地说数据“王屋”不存在。
但同时我们会发现第4位被覆盖了,因为“zhangsan”和“lisi”的哈希函数都返回了该位。那么随着布隆过滤器保存的数据不断增加,重复的概率也会不断增加。因此,当我们对某个数据进行过滤时,如果发现它的三个哈希值都被记录在过滤器中,那么也只能说明该数据可能被包含在过滤器中,但并不能绝对确定,因为其他数据的哈希值可能影响了结果。这也解释了上面提到的布隆过滤器只能表明“某些东西一定不存在或可能存在”。至于为什么要使用三个不同的哈希函数来获取值,因为只要三个哈希值之一不存在不存在,则意味着该数据一定不在过滤器中,这样可以减少由于哈希冲突(两个数据具有相同哈希值)而出错的概率。
标题:缓存穿透及解决方案
链接:https://izhangwan.com/news/sypc/27926.html
版权:文章转载自网络,如有侵权,请联系删除!
用户评论
这类主题的游戏肯定很有挑战性!我爱这种考验逻辑思维和解决问题的玩法。
有11位网友表示赞同!
感觉这游戏会很烧脑!希望能找到多种不同的解决方案,而不是只有一种正确答案。
有5位网友表示赞同!
缓存穿透一直是我电脑编程里遇到的难题,没想到能变成游戏了!
有15位网友表示赞同!
对系统架构和网络工程感兴趣的话,这款游戏绝对不能错过!
有18位网友表示赞同!
看着名字就觉得这游戏肯定非常考验技术的!
有12位网友表示赞同!
我猜这个游戏应该要运用很多编程知识才能通关吧?太刺激了!
有13位网友表示赞同!
希望这个游戏中能够学-到一些实际应用到的缓存穿透解决方案,这样还能增强我的技能!
有15位网友表示赞同!
缓存穿透问题虽然很烦人,但能把它玩成游戏还真是个创意!
有8位网友表示赞同!
如果这款游戏难度适中,我一定会尝试一下!
有10位网友表示赞同!
这类注重逻辑思维的游戏是我喜欢的类型之一,期待它的上线!
有11位网友表示赞同!
不知道这个游戏的画面和音效怎么样?希望做得生动有趣!
有19位网友表示赞同!
我觉得这游戏会对程序设计爱好者很有帮助!
有12位网友表示赞同!
游戏能让人更轻松愉快的学-知识,太棒了!
有14位网友表示赞同!
我期待这款游戏能带给我全新的游戏体验!
有6位网友表示赞同!
希望玩家之间能够分享各种各样的缓存穿透解决方案,互相学-进步。
有7位网友表示赞同!
这类游戏的受众群体应该很大,毕竟谁不想提升自己的技术水平呢?
有16位网友表示赞同!
这款游戏能否兼顾娱乐性和教育性,将会决定它是否能取得成功!
有12位网友表示赞同!
想知道这个游戏有没有不同的难度级别,这样才能满足不同玩家的需求!
有7位网友表示赞同!
期待看到更多类似的创新游戏的出现,将知识和娱乐完美结合!
有9位网友表示赞同!