(1)什么是缓存雪崩?怎么解决?
用缓存来缓冲外部请求对数据库的冲击,缓存每秒可抗住1万请求,如果宕机,请求将直接打在数据库上,造成数据库宕机,从而导致整个系统宕机。
2种策略(同时使用)
1.对缓存做高可用,防止缓存宕机。
2.使用断路器,如果缓存宕机,为了防止系统全部宕机,限制部分流量进入 DB,保证部分可用,其余的请求返回断路器的默认值。
(2)什么是缓存穿透?怎么解决?
(2.1)缓存查询一个没有的Key,同时数据库也没有,如果黑客大量使用这种方式,会导致数据库宕机。
解决方案:使用一个默认值来防止,例如,当访问一个不存在的 key,然后再去访问数据库,还是没有,那么就在缓存里放一个占位符,下次来的时候,检查这个占位符,如果发生是占位符,就不去数据库查询了,防止数据库宕机。
(2.2)大量请求查询一个刚刚失效的 key,导致数据库压力倍增,可能导致宕机,但实际上,查询的都是相同的数据。
解决方案:可以在这些请求代码加上双重检查锁。但是那个阶段的请求会变慢。不过总比数据库宕机好。
(3)什么是缓存并发竞争?怎么解决?
多个客户端写一个Key,如果顺序错了,数据就不对了,但是顺序无法控制。
解决方案:使用分布式锁,例如 zk,同时加入数据的时间戳。同一时刻,只有抢到锁的客户端才能写入,同时,写入时,比较当前数据的时间戳和缓存中数据的时间戳。
(4)什么是缓存和数据库双写不一致?怎么解决?
连续写数据库和缓存,但是操作期间出现并发,导致数据不一致。
解决方案:
(4.1)先更新数据库,再更新缓存。——但是无法避免并发问题
(4.2)先删缓存,再更新数据库。——使用“双删”
(4.3)先更新数据库,再删除缓存。——使用“双删”
10.Redis面试常见问答
最新推荐文章于 2024-05-31 14:45:01 发布