20210813
概述
这3种情况的后果都是:缓存没起到缓存的作用,大量查询的请求还是到达了数据库
缓存穿透
查一个不存在的数据,比如id=-1的数据,并且发大量的请求查该数据,由于该数据缓存中没有,这些请求必然会到达数据库
解决:
- 从数据库中没查到的数据,缓存成key-null(最简单的办法)
- 采用布隆过滤器(上例中将所有id放入布隆过滤器,查数据库前先用布隆过滤器判断下该id是否存在)
缓存击穿
大量的请求查询id=1234的数据时,突然该数据的缓存过期,这些大量的请求也必然会到达数据库
解决:
- 热点缓存永不过期
缓存雪崩
突然90%的缓存同时过期,这些大量的请求也必然会到达数据库
一大片缓存同时过期,如同雪崩一样
解决:
- 缓存的过期时间设置成随机的
总结
缓存雪崩是针对大量key,缓存穿透和缓存击穿是针对个别key
网友评论