穿透、击穿、雪崩

面试的时候问到了,之前看过但是记不起来了,淦!

穿透

定义:用户查询数据,redis里面没有,于是访问数据库,数据库也没有。大量用户访问同一个redis没有的数据,对数据库造成巨大的压力。

解决方法:

  1. 布隆过滤器

  2. 设置null值(redis数据量过大内存占用高,并且存在redis和数据库数据不一致的可能性)

击穿

定义:是指一个非常热点的key,在不停的扛着大并发,当这个key失效时,一瞬间大量的请求冲到持久层的数据库中,就像在一堵墙上某个点凿开了一个洞!

解决方法:

  1. 设置不过期(逻辑过期)

  2. 互斥锁

雪崩

定义:在某一个时间段,缓存的key大量集中同时过期了,所有的请求全部冲到持久层数据库上,导致持久层数据库挂掉!or Redis服务直接挂掉,请求只能打到数据库。

解决方法:

  1. 搭建redis集群,设置哨兵(为了防止redis服务挂掉)

  2. 数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀

Comment