redis缓存穿透、缓存击穿、缓存雪崩概念及解决方案
緩存穿透
概念
訪問一個(gè)不存在的key,緩存不起作用,請(qǐng)求會(huì)穿透到DB,流量大時(shí)DB會(huì)掛掉。
解決方案
采用布隆過濾器,使用一個(gè)足夠大的bitmap,用于存儲(chǔ)可能訪問的key,不存在的key直接被過濾;
訪問key未在DB查詢到值,也將空值寫進(jìn)緩存,但可以設(shè)置較短過期時(shí)間。
緩存雪崩
概念
大量的key設(shè)置了相同的過期時(shí)間,導(dǎo)致在緩存在同一時(shí)刻全部失效,造成瞬時(shí)DB請(qǐng)求量大、壓力驟增,引起雪崩。
解決方案
可以給緩存設(shè)置過期時(shí)間時(shí)加上一個(gè)隨機(jī)值時(shí)間,使得每個(gè)key的過期時(shí)間分布開來,不會(huì)集中在同一時(shí)刻失效。
緩存擊穿
概念
一個(gè)存在的key,在緩存過期的一刻,同時(shí)有大量的請(qǐng)求,這些請(qǐng)求都會(huì)擊穿到DB,造成瞬時(shí)DB請(qǐng)求量大、壓力驟增。
解決方案
在訪問key之前,采用SETNX(set if not exists)來設(shè)置另一個(gè)短期key來鎖住當(dāng)前key的訪問,訪問結(jié)束再刪除該短期key。
總結(jié)
以上是生活随笔為你收集整理的redis缓存穿透、缓存击穿、缓存雪崩概念及解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 布隆过滤器的缺点
- 下一篇: nginx 配置文件nginx.conf