一、访问拓扑图
二、什么是缓存穿透?
1.用户通过浏览器访问nginx,nginx本地缓存中找不到数据,则从redis中找,redis中找不到数据,则从数据库中找。
2.但是也没有这样的数据,所以redis中和nginx本地缓存中不会缓存;
3.如果黑客利用这个逻辑漏洞,就专门找 你网站中不存在的数据,每秒高并发访问,直接会导致数据库服务器宕机。
以上这种问题就叫做缓存穿透,因为透过了各种缓存,直接访问了数据库,最终导致数据库宕机。
三、解决方案
1.缓存预热:通过数据库的变化,来更新redis中的数据,查询的时候如果redis中查询不到数据直接返回为null,不再直接查询数据库。(下图为做过项目中的一个广告缓存预热流程)
2.布隆过滤器
3.如果从数据库中查询,查询到的结果为null,可以直接将这个数据缓存进redsi,超时时间设定为1-3秒,如果黑客想以短时间高并发来访问,则被redis拦截住,因为redis中有这样的数据,但是值为null,如果黑客不访问这个数据了,因为数据设置了超时时间,超过这个时间会被redis自动销毁,也不会产生大量的垃圾数据。