问题:查询一个Redis和数据库中都不存在的数据,大量请求去访问数据库,导致数据库宕机。
解决办法:
1、根据id查询,如果id是自增的,将id的最大值放到Redis中,在查询数据库之前,直接比较一下id。
2、如果id不是整型,可以将全部的id放到set中,在用户查询之前,去set中查看一下是否有这个id。
3、获取客户端的ip地址,可以将ip的访问添加限制。
缓存击穿:是指查询一个Redis中没有但是数据库中存在的数据,并且这个数据是热点数据。
解决办法:
1、在访问的数据缓存中没有的时候,添加互斥锁,让少数请求可以访问数据库,避免数据库宕机。
2、把热点数据的生存时间去掉(不推荐)
缓存雪崩:
问题:当大量缓存数据同时到期,最终大量的请求去访问数据库,导致数据库宕机。
结局办法:将缓存中数据的生存时间设置为随机时间。
缓存倾斜:
问题:大量的热点数据集中在一个Redis节点上,Redis无法承受住大量请求,从而导致Redis宕机。
解决办法:
1、扩展主从架构,搭建大量从节点,环节Reidis压力