缓存穿透、击穿、雪崩
缓存击穿
定义:用户请求的缓存过期。若不断并发请求该数据,会导致数据库压力过大。
解决办法:
- 设置热点数据永不过期(也可以异步更新热点数据的过期时间)
- 加互斥锁。发生缓存缺失时,先加锁再去读数据库。等待数据缓存完毕再释放锁,这样可以保证其他相同请求不会去读数据库。
缓存穿透
定义:用户请求了缓存和数据库都不存在的数据。若不断请求该数据,会导致数据库压力过大。
解决办法:
- 接口层增加用户鉴权等权限校验。
- 使用布隆过滤器过滤掉不存在的key请求。
- 该key对应的value设置为null放置在缓存。
缓存雪崩
定义:缓存雪崩是指当大量缓存同时过期或缓存服务宕机,所有请求的都直接访问数据库,造成数据库高负载,影响性能,甚至数据库宕机。
解决办法:
- 缓存数据的到期时间随机化,避免同一时间存在大量数据过期。
- 热点数据永不过期。
缓存击穿和雪崩有些相似,都是缓存过期导致,但是雪崩是大量key过期,击穿是热线key过期。