缓存穿透
查询一个数据,发现redis内存数据库没有,于是向持久层数据库查询。发现也没有,于是本次查询失败。当查询很多时,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力。
解决方法:
1) 布隆过滤器(建议)
2)缓存空对象
缓存击穿
指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发访问特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。
解决方法:
1)设置热点数据永远不过期
2) 加互斥锁
缓存雪崩
缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。
解决方法:
1)缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生