日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

的緩存異常處理,緩存雪崩( 二 )


比如(緩存過期時間 - 當前系統(tǒng)時間)小于 5 分鐘,那么就刷新一次緩存,并且重置緩存過期時間;不過這個方法也有個致命的問題:如果一個數(shù)據(jù),恰好在緩存失效前五分鐘,一次訪問都沒有,那么就不會觸發(fā)檢查更新,當緩存失效后有大量請求訪問,那么也會造成緩存擊穿 。使用鎖在緩存失效后,通過互斥鎖或者隊列,控制讀數(shù)據(jù)庫和寫緩存的線程數(shù)量 。
第一種方法:整個方法是 synchronized 的,這樣做雖然可以防止大量請求落到 DB 上,但是就算是緩存沒有失效,需要從 DB 中查詢數(shù)據(jù)也需要排隊,無疑是降低了系統(tǒng)的吞吐量 。第二種方法:當緩存失效時,只對查詢數(shù)據(jù)庫的操作進行加鎖,這樣對于緩存沒有失效的情況也非常友好,但是查詢操作這里加鎖,也只是會阻塞掉住其他調(diào)用,第一其他線程要等待,對調(diào)用方不友好,第二這些請求被阻塞的請求最終還是會落到 DB 上的 。
第三種方法:使用互斥鎖,搶到鎖的話讀數(shù)據(jù)庫并寫入緩存,搶不到鎖的話也不阻塞,而是直接去讀緩存,如果緩存中依然讀不到數(shù)據(jù)(搶到鎖的可能還沒有將緩存寫入成功),就等一會再試試讀緩存 。雙緩存設(shè)置一級緩存和二級緩存,一級緩存過期時間短,二級緩存過期時間長或者不過期,一級緩存失效后訪問二級緩存,同時刷新一級緩存和二級緩存 。
雙緩存的方式,說白了就是不能將一級緩存和二級緩存中數(shù)據(jù)同時變成失效,當一級緩存失效后,有多個請求訪問,彼此之間依然是競爭鎖,搶到鎖的線程查詢數(shù)據(jù)庫并刷新緩存,而其他沒有搶到鎖的線程,直接訪問二級緩存(代碼可以參考上文中的互斥鎖),如圖:我將持續(xù)分享Java開發(fā)、架構(gòu)設(shè)計、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關(guān)注;關(guān)注我后,可私信發(fā)送數(shù)字【1】,獲取學(xué)習(xí)資料 。
Java高并發(fā)下緩存問題的現(xiàn)象及本質(zhì)原因是什么?

的緩存異常處理,緩存雪崩


緩存擊穿緩存擊穿是指緩存沒有用戶請求的數(shù)據(jù)但是數(shù)據(jù)庫中有用戶請求的數(shù)據(jù),這時如果并發(fā)用戶很多又無法通過緩存來得到數(shù)據(jù)只能從數(shù)據(jù)庫取數(shù)據(jù)進而導(dǎo)致數(shù)據(jù)庫壓力瞬間增大,系統(tǒng)訪問緩慢 。緩存雪崩緩存雪崩指的是同一時間有大量的緩存數(shù)據(jù)過期,這時候有大量的訪問進而導(dǎo)致數(shù)據(jù)庫壓力劇增進而宕機 。緩存雪崩和緩存擊穿的差別是,緩存雪崩指的是大量的數(shù)據(jù)到期,緩存擊穿指的是單個緩存數(shù)據(jù)到期本質(zhì)原因是系統(tǒng)在進行設(shè)計時對緩存體系設(shè)計不合理對于熱點數(shù)據(jù)可以考慮設(shè)置為永不過期,通過手工的方式來處理熱點數(shù)據(jù)對于緩存數(shù)據(jù)的過期時間設(shè)置為隨機避免同一時間有大量的緩存數(shù)據(jù)失效可以考慮通過分布式的方式來配置緩存 。
如何解決Redis緩存雪崩、緩存穿透、緩存并發(fā)等問題?
的緩存異常處理,緩存雪崩


緩存穿透很多項目在使用Redis或其他緩存框架的時候,都是先查詢緩存,查詢不的話再查詢數(shù)據(jù)庫,查到之后再放到內(nèi)存中;如果一個key值本身就不存在,那么每一次都會查詢數(shù)據(jù)庫,也就是常說的【緩存穿透】 。應(yīng)對方法:如果在Redis中查詢不到,并且查詢數(shù)據(jù)庫也沒有結(jié)果,那么就將這個key寫入到Redis中,value=http://www.codepub.com/shouji/peijian/空,并設(shè)置一個超時過期時間,例如五分鐘,那么五分鐘以內(nèi)的對這個可以的所有查詢就可以攔截下來,如果數(shù)據(jù)庫有key對應(yīng)的數(shù)據(jù)了,那么五分鐘后Redis中的緩存過期,會訪問數(shù)據(jù)庫并加載緩存;但是如果被惡意攻擊,每次請求的key都不相同且不存在,那么依然會穿透到數(shù)據(jù)庫;布隆過濾器:將可能存在的數(shù)據(jù)Hash到一個足夠大的bitmap上,它可以告訴你 “某個key一定不存在或者可能存在”,一個一定不存在的數(shù)據(jù)會被bitmap攔截 。

推薦閱讀