缓存穿透、缓存击穿、缓存雪崩
缓存处理流程
缓存穿透:用户请求,缓存和数据库中都没有的数据。如发起id为“-1”的数据或者id为特别大不存在的数据,用户很可能是攻击者,攻击会导致数据库压力过大。
解决方案:
(1)接口增加校验,如用户权限校验,id做基础校验,id< 0的直接拦截。
(2)从缓存和数据库中都不存在的数据,将key-value对写成key-null,缓存有效时间设置短些。
缓存击穿:用户请求缓存中没有,数据库中存在的数据。一般是由于缓存时间到期,这时由于并发用户特别多,同时缓存没有读到数据,又同时去数据库去取数据,引起的数据库压力瞬间增大,造成过大压力。
解决方案:
(1)设置热点数据永不过期。
(2)添加访问数据库的互斥锁,防止去数据库获取重复的数据。
缓存雪崩:缓存中数据大批量到过期时间,而查询数据量巨大,引起的数据库压力甚至宕机。
缓存击穿是并发查同一条数据,缓存雪崩是指不同的数据都过期了,很多数据从缓存查不到,进而去数据库查询。
解决方案:
(1)缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
(2)分布式缓存数据库,热点数据均匀分布在不同缓存数据库中。
(3)设置热点数据永不过期。