redis的高频面试题(开发一定会用到)
redis的缓存穿透,如何解决?
所谓的缓存穿透:
在客户端去查询数据的时候,数据库中没有数据,缓存中也没有,按照redis源码的执行流程
这就会出现情况-->当客户端发送请求查询数据的时候,并不会直接查询数据库,无论有没有数据都会先去查询redis,如果redis没有,则再查数据库,数据库也没有
相当于每一次访问请求的时候都会查询两次
当缓存的次数请求的过多的时候(这个时候redis不会造成宕机),redis就会认为你要搞他,所以redis就会不工作--->造成非常严重的现象,会跳过缓存直接去查询数据库,缓存就相当于没有用,本来缓存是为了提升效率(节省时间的),项目的效率就会大大降低(缓存命中率)
当直接跳过缓存的时候,数据库的访问量就会增加到非常大的地步,数据库可能就会存在宕机的风险(这就是当黑客开始攻击的时候-->不会直接攻击数据库-->先攻击redis缓存-->redis就会开启自我保护不再工作-->开始大量发送并发攻击数据库)
这也就是所谓的缓存穿透
和case穿透很像
int i = 3;
switch(i){
case 1: "今天很开心";
case 2: "今天更开心";
case 3:
}
用网络上获取的数据都会以抓包的形式拿取(tcp/udp协议)
短连接:从百度爬回来的数据--->只管发(按照规定时间(2s))--->不管项目是否接收到了
长连接:不但要管发送数据,还要操心数据是否发送到了,如果没有发送到就会一直等待,直到连接超时
数据包攻击:大量使用并发发送数据包到目标项目,导致目标项目因为性能问题无法接收到任何一个包的数据-->开始给你指定另外一条路(这些正确的数据就会被黑客模拟出来的路所接收到),黑客为了获取数据,还会一直不断的向真正服务器所发送假数据,让其一直处于崩溃状态
redis的缓存穿透,如何解决?