缓存雪崩:
缓存中同一时刻⼤批热点数据同时过期,那么就可能导致⼤量请求直接访问数据库,造成数据库压力瞬间增大,严重会让数据库崩了。
解决办法:
1.在原有的失效时间上加上一个随机值,比如1-5分钟随机。这样就避免了因为采用相同的过期时间导致的缓存雪崩。
2.提高数据库的容灾能力,可以使用分库分表,读写分离的策略。
3.了防止Redis宕机导致缓存雪崩的问题,可以搭建Redis集群,提高Redis的容灾性
4.使用熔断机制。当流量到达一定的阈值时,就直接返回提示,防止过多的请求打在数据库上。
- 缓存击穿
缓存击穿:缓存击穿是指某⼀个热点key失效,导致了本应该访问redis的⼤量请求直接访问数据库
解决⽅案:
1.把这个热点key 不设过期时间
2.使用互斥锁。如果缓存失效的情况,只有拿到锁才可以查询数据库,但是这样降低了并发,导致系统的性能变差。
- 缓存穿透
缓存穿透:是指某时刻大量访问的数据在redis和数据库中都没有,但是也会访问到数据库上面,造成数据库压力(一般情况为攻击),这就是缓存穿透。
解决⽅案:
1.使⽤布隆过滤器,它的作⽤就是过滤掉那些不存在的数据访问。虽然布隆过滤器也有误差,但是它认为⼀个数据不存在,那么这个数据就肯定不存在。如果布隆过滤器认为应该数据存在,数据也可能不存在,但是误差很小。
2.设置一个空数据。当在数据库中也查询不到数据时,直接在缓存中存入一个特定的数据,下次再查询这个数据时,就会直接在缓存中查询出一个特定的数据返回。
网友评论