做網(wǎng)站打廣告圖片素材app推廣方法
緩存穿透
緩存穿透是指客戶端請(qǐng)求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫(kù)中都不存在,導(dǎo)致這些請(qǐng)求直接到了數(shù)據(jù)庫(kù)上,對(duì)數(shù)據(jù)庫(kù)造成了巨大的壓力,可能造成數(shù)據(jù)庫(kù)宕機(jī)。
常見(jiàn)的解決方案:
1)緩存無(wú)效 key
如果緩存和數(shù)據(jù)庫(kù)中都查不到某個(gè) key 的數(shù)據(jù)就寫(xiě)一個(gè)到 Redis 中去并設(shè)置過(guò)期時(shí)間。
SET key value EX 60
,這種方式可以解決請(qǐng)求的 key 變化不頻繁的情況,將無(wú)效 key 的過(guò)期時(shí)間設(shè)置短一點(diǎn)。
2)布隆過(guò)濾器
布隆過(guò)濾器是一種由二進(jìn)制向量(或者說(shuō)位數(shù)組)和一系列隨機(jī)映射函數(shù)(哈希函數(shù))兩部分組成的數(shù)據(jù)結(jié)構(gòu)。相比于我們平時(shí)常用的 List、Map、Set 等數(shù)據(jù)結(jié)構(gòu),它占用空間更少并且效率更高,但是缺點(diǎn)是器返回的結(jié)果是概率性的,而且不是非常準(zhǔn)確的。理論情況下添加到集合中的元素越多,誤報(bào)的可能性就越大。并且存放在布隆過(guò)濾器的數(shù)據(jù)不容易刪除。
3)接口限流
根據(jù)用戶或者 IP 對(duì)接口進(jìn)行限流,對(duì)于異常頻繁的訪問(wèn)行為,還可以采取黑名單機(jī)制,例如將異常 IP 列入黑名單。
- 緩存空對(duì)象
- 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,維護(hù)方便
- 缺點(diǎn):
- 額外的內(nèi)存消耗
- 可能造成短期的不一致
- 布隆過(guò)濾器
- 優(yōu)點(diǎn):內(nèi)存占用較少,沒(méi)有多余的key
- 缺點(diǎn):
- 實(shí)現(xiàn)復(fù)雜
- 存在誤判可能
- 接口限流