一行代码解决缓存击穿的问题,学好这招,轻松解决
一行代碼解決緩存擊穿的問題
,學好這招,輕松解決
目前缺陷
首先 ,為什么說目前網(wǎng)上流傳的方案 ,落地性差呢,因為都缺乏一個可以和SpringBoot結(jié)合起來的真實場景,基本上都脫離了SpringBoot,只站在Java這個層級去分析 。那問題就來了 ,現(xiàn)在還有只用SpringMvc,卻不用SpringBoot的公司么?因此,本文嘗試將該方案和SpringBoot結(jié)合起來,講一個確實可行,可以落地的方案!
當然 ,我們先來說說目前在網(wǎng)上流傳的幾套方案,到底靠譜在哪里!
(1)布隆過濾器
關(guān)于布隆過濾器,我就不介紹太多 ,這里就理解為是一個過濾器,用于快速檢索一個元素是否在一個集合中;那么當一個請求來的時候,快速判斷這個請求的key是否在指定集合中!如果在,說明有效,則放行
。如果不在,則無效攔截。
至于實現(xiàn)
,各大博客也說了用了google提供的
com.google.guava guava 19.0 這個包里有現(xiàn)成寫好的java類給你使用了
,當然demo代碼我就不貼了,一抓一大把!
當然,似乎看上去完美無暇!一切都是那么的合適!
然而到這里,我就真的問一句,你們真的用了這個方案了 ?
我如果猜得沒錯,應該沒幾個人遇到過緩存擊穿的問題~
更何況 ,證明這個說法的正確性~
該方案最大的一個問題是布隆過濾器不支持反向刪除操作,例如你的項目里活躍的key的數(shù)量只有1000w個 ,但是全部key數(shù)量有5000w個 ,那這5000w個key會全部存在布隆過濾器里 !
直到某一天,你會發(fā)現(xiàn)這個過濾器太擁擠了,誤判率太高