redis缓存穿透、缓存击穿、缓存雪崩

104 阅读1分钟

缓存穿透:key对应的数据在数据源不存在,针对key的请求获取不到,请求都会到数据源,从而可能压垮数据源。 解决方案:1.一定不存在的key存在bitmap中,过滤这些key的请求 2.查询的数据为空,对该key进行缓存,结果为空,过期时间设置较短

缓存击穿:key对应数据源存在,在redis中过期,此时大量并发请求过来,发现缓存过期,从后端DB加载数据源并回到缓存,这是大并发可能压垮后端DB。 解决方案:1.设置热点数据永远不过期 2.设置布隆过滤器 3.加互斥锁,即从缓存中读取数据,若数据不存在,则获取互斥锁,若获取到锁从数据源中获取数据并更新到缓存中,若为获取到互斥锁,则等待100ms

缓存雪崩:当缓存服务器重启,或大量缓存集中失效,在失效时也会给后端带来很大压力。 解决方案:1.缓存的数据过期时间设置为随机 2.设置热点数据永远不过期 3.多级缓存,本地一级,redis二级