什么是穿透(注:一般击穿都为恶意操作的比较多)
穿透就是指需要调用的键,缓存里面不在,需要访问数据库,黑客利用漏洞大量调用这个键而导致宕机
穿透如何解决
-
访问数据库的时候加一个拦截就好,一般用布隆过滤器(推荐)
-
可以设置一个这个键的空值,每次调用都会返回这个空值(不推荐)
什么是击穿(注:一般击穿都是设计有问题)
击穿就是指大量用户同时访问热点数据(也就是一个键),这个键过期了重新获取的时候,这几毫秒数据库就被高并发给搞宕机了
击穿如何解决
-
就是一些热点数据在高峰期的时候定时变长一点,从而做到防止击穿出现
-
使用分布式锁,在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。保证同时刻只有一个线程访问。
什么是雪崩(注:一般击穿都是设计有问题)
雪崩就是大面积的过期时间设置的是相同的时间同时失效,DB请求量大、压力骤增,从而导致宕机
雪崩如何解决
-
redis高可用(就是采用集群思想)
-
限流降级 就是在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
-
数据预热 设置不同的过期时间,让缓存失效的时间点尽量均匀。