大家好,我系渣渣骥,今天跟大家分享的问题是:什么是Redis的穿透。
穿透,故名思意,就是说请求绕过了Redis缓存,直接访问了数据库。当有人恶意构造大量这种绕过缓存的请求时,Mysql或者Oracle这种关系型数据库就扛不住了,最终导致服务中断。
那么,如何避免Redis穿透呢?
第一,参数校验,参数校验,参数校验,很简单,但是重要的事说三遍。比如黑客恶意构造了大量id = -1的请求,在你的Redis缓存中永远无法命中。最好的方式就是参数校验时就把请求拦截住,不要让这个请求走到数据层去。
第二,当数据库中没有对应数据时,就在缓存中写一个异常值。这样下次异常,请求来的时候就可以取到缓存了。比如 set -1 Error。这样的话,下次就可以走缓存了。
用户评论