什么是缓存雪崩
redis故障或者大量的消息在同一时间失效,导致大量热点缓存失效,于是就会有大量的流量涌入数据库,如果数据库扛不住压力,那么就会直接引发后台系统崩溃。
如何解决缓存雪崩
- 保证redis集群的高可用性,比如保证分布式存储架构和主从结构的运行,这样的话一个slave宕机还有master,一个master宕机的话会有slave顶上来。
- 不要太过依赖redis内存,也可以使用ehcecha缓存进行缓冲
- 使用hystris做限流和降级,防止过多的流量大量涌入数据库
- 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
- redis开启数据持久化,哪怕发生了宕机,立即重启后也能快速恢复缓存数据
什么是缓存穿透
某些恶意用户,对缓存和数据库中不存在的数据进行大量的访问,比如id=-1的数据,那缓存中肯定是没有的,就会直接访问数据库,如果这部分流量过大,也会对数据库造成压力,对正常用户的使用造成影响。
如何解决缓存穿透
每次系统从数据库中没有查询到数据,就将这个key写一个空值到缓存中,比如第一次查询id=-1在数据库中没查询到数据,那么将id=-1这个写到缓存中。下一次请求id=-1的数据是,缓存就直接返回空值,不会再访问数据库了