Redis 相关缓存问题
缓存雪崩
概念
缓存雪崩其实有很多的原因,缓存服务器宕机,或者缓存服务器集群故障,等等,总体来说属于系统架构中的缓存部分架构失效,导致大量的请求到达持久层数据库,由数据库处理请求,但是数据库的每秒并发最高不能超过2000个,突然增大的流量访问可能会直接让数据库挂掉,此时dba 无论怎么重启都会导致数据库宕机,进而导致整个服务挂掉,按照下面的现象图说明:
其实缓存雪崩这类的问题,并不是再生产环境中一定会出,但是一旦出现之后,往往造成的影响是巨大的
并且,缓存雪崩这样的问题其实并不能完全处理,也没有一定完美的处理方法,只能是尽量增强系统架构的健壮性,从而将损失降到最小
处理缓存雪崩的方法
事前
Redis 高可用性,避免全盘崩溃
事中
本地ehcache缓存 + hystrix 限流&降级,避免Mysql 被打死
事后
redis 持久化,快速恢复缓存数据
生产环境缓存系统模型演示
缓存穿透
产生原因
系统接受到5000个请求,但是这些请求数据在数据库和缓存中都不存在,这样的话,数据库中的请求量肯定会激增,同样很容易将数据库打死
解决办法
当数据库中没有查到这个数据的时候,再缓存中配置一个空值,然后将缓存中的key对应的value发送给业务端
其实这种方式也是有点问题,所以尽量在业务设计的时候,通过一些别的方式进行处理,否则会导致缓存空间不足,同样会影响到业务的响应