1.redis的缓存穿透:
原因:在项目中我们使用了redis后,查询数据会先去redis中查询,如果在redis查询不到就会去数据库中查询,数据库查询速度是有极限的,比如MySQL的查询极限大概是每秒8000次,如果超出了这个极限数据库就会宕机,对我们的程序产生极大影响,如果一个黑客不停地去查询一个不存在的数据,比如主键等于-1的值,正常情况下我们的程序中不会有主键等于-1,所以这个时候,缓存穿透就产生了,redis就会向数据库中一直查询,直到你的数据库过载造成数据库崩溃,
解决方法:1.布隆过滤器,在程序内部维护一系列合法的请求,比如id>0的等,将非法的请求直接过滤掉。
2.对返回结果为null的请求也进行缓存,但是要注意把销毁的时间放短一些,这样做以后,非法的请求再过来就会直接返回空
2.redis的缓存击穿:
原因:redis中的缓存是有过期时间的,如果在高并发的项目中,redis中有个频繁使用的数据的key在某一时间失效了,但是这时有大量查询这些数据的请求过来,redis发现这些数据过期了就会去你的数据库中加载数据重新设置到缓存中,而这个时候,超大的并发可能就会瞬间把数据库压垮,就好比你去表演胸口碎大石,有石头挡着的时候那锤子对你的伤害有限,但是突然石头没了,但是锤子已经砸下来了,你没办法只能硬抗