缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求
解决:接口层增加校验,比如用户鉴权校验,参数做校验,不合法的参数直接代码Return,比如:id 做基础校验,id <=0的直接拦截等,或者布隆过滤器(Bloom Filter)
缓存雪崩是因为大面积的缓存失效,打崩了DB
解决:在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效
缓存击穿是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库
解决:设置热点数据永远不过期。或者加上互斥锁
布隆过滤器:
原理: 1、当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1
2、检索时,只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在