缓存雪崩:缓存在redis数据库中的数据大面积失效,请求落到了例如mysql数据库中,由于mysql不支持大量的请求操作,所以导致mysql数据库崩溃;
解决方案:①缓存失效后加锁②队列控制③key设置不同过期时间
缓存穿透:大量数据请求根本不存在redis缓存中的数据,导致没有走缓存,直接跑去访问数据库;
解决方案:①先把请求的数据缓存起来,然后设置过期时间②使用布隆过滤器;
缓存击穿:热点数据被频繁访问,这个热点数据突然失效(过期),导致没有走缓存,直接去访问数据库,导致数据库崩溃;
解决方案:①缓存热点数据基本不更新,设置永不失效②更新不频繁,缓存刷新流程耗时较少,采用分布式互斥锁③数据更新频繁,刷新流程耗时,可以利用定时线程在缓存过期前主动地重新构建缓存或或者延后缓存的过期时间,以保证所有的请求能一直访问到对应的缓存;