92手95口98全身走什么意思,ass中国女明星裸体pic,KTV里给800小费能睡吗
  • <s id="my6qw"><code id="my6qw"></code></s>
  • 武漢北大青鳥中南軟件學院
    400-027-0822

    干貨!教你深入理解緩存問題,使用緩存無壓力!

    2019-02-21供稿中心: 北大青鳥

    摘要: 在高并發或大數據的場景下,面對熱點數據的使用性能問題,緩存是常用的解決方式,主要作用包括將數據寫入速度更快的存儲設備,將數據緩存到離應用最近的位置,將數據緩存到離用戶最近的位置等。
    在高并發或大數據的場景下,面對熱點數據的使用性能問題,緩存是常用的解決方式,主要作用包括將數據寫入速度更快的存儲設備,將數據緩存到離應用最近的位置,將數據緩存到離用戶最近的位置等。
    \
    一、緩存雪崩
     
    緩存雪崩可簡單理解為,由于原有緩存失效,新緩存未到期間(例如:我們設置緩存時采用了相同的過期時間,在同一時刻出現大面積的緩存過期),所有原本應該訪問緩存的請求都去查詢數據庫,對數據庫CPU和內存造成巨大壓力,嚴重的會導致數據庫宕機,從而形成一系列連鎖反應,造成整個系統崩潰。
     
    緩存失效時的雪崩效應對底層系統的沖擊很大,大多系統設計者采用加鎖或隊列的方式來保證不會有大量的線程對數據庫一次性進行讀寫,從而避免失效時大量并發請求落到底層存儲系統上。另外一個簡單方案就是分散緩存失效時間,例如可以在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個緩存過期時間的重復率就會降低,很難引發集體失效的事件。
     
    1.若一般并發量不是特別多,常用解決方案是加鎖排隊,可減輕數據庫的壓力,但不會提高系統吞吐量。假設在高并發下,緩存重建期間key是鎖著的,此時1000個請求中999個在阻塞狀態,同樣會導致用戶等待超時,這種方法治標不治本!
     
    注意:使用加鎖排隊的方式解決分布式環境的并發問題,可能還要解決分布式鎖的問題;線程還會被阻塞,用戶體驗較差,因此,在真正的高并發場景下很少使用!
     
    2.另一個解決方案是,給每一個緩存數據增加相應的緩存標記,記錄緩存是否失效,如果緩存標記失效,則更新數據緩存。
     
    解釋說明
     
    1.緩存標記:記錄緩存數據是否過期,若過期會觸發通知另外的線程,則在后臺更新實際key的緩存;
     
    2.緩存數據:它的過期時間比緩存標記的時間延長1倍,例:標記緩存時間30分鐘,數據緩存設置為60分鐘。 這樣,當緩存標記key過期后,實際緩存還能將舊數據返回給調用端,直到另外的線程在后臺更新完成后,才會返回新緩存。
     
    關于緩存崩潰的三種解決方案:使用鎖或隊列、設置過期標志更新緩存、為key設置不同的緩存失效時間,還有一種被稱為“二級緩存”的解決方法,有興趣的小伙伴可自行研究。
     
    二、緩存穿透
     
    緩存穿透是指用戶無法在緩存中查詢數據,需要去數據庫查詢,再返回空(相當于進行兩次無用查詢)。此時請求就繞過緩存直接查數據庫,這就是經常提到的緩存命中率問題。
     
    有多種方法可有效的解決緩存穿透問題,最常見的是采用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的bitmap中,一定不存在的數據則會被bitmap攔截掉,從而避免對底層存儲系統的查詢壓力。
     
    另外更為簡單的方法是,若一個查詢返回的數據為空(不管是數據不存在,還是系統故障),我們仍然將此空結果進行緩存,過期時間會很短,最長不超過五分鐘。通過這個直接設置的默認值存放到緩存,這樣第二次到緩沖中獲取就有值了,而不會繼續訪問數據庫,這種辦法最為簡單。
     
    將空結果進行緩存,下次同樣的請求則直接返回空,即可避免當查詢的值為空時引起的緩存穿透。同時也可單獨設置一個緩存區域存儲空值,對要查詢的key進行預先校驗,然后再放行給后面的正常緩存處理邏輯。
     
    三、緩存預熱
     
    緩存預熱就是系統上線后,將相關的緩存數據直接加載到緩存系統中。這樣即可避免在用戶請求時,先查詢數據庫,再將數據緩存的問題,用戶可直接查詢事先被預熱的緩存數據。
     
    解決思路:
     
    1.直接寫一個緩存刷新頁面,上線時手工操作;
     
    2.數據量不大時,可以在項目啟動時自動進行加載;
     
    3.定時刷新緩存。
     
    四、緩存更新
     
    除了緩存服務器自帶的緩存失效策略外(Redis默認的有6種策略可供選擇),還可根據具體的業務需求進行自定義緩存淘汰,常見策略有:
     
    1.定期清理過期緩存;
     
    2.當有用戶請求時,判斷緩存是否過期,過期則在底層系統得到新數據并更新緩存。
     
    兩者各有優劣,第一種的缺點是維護大量緩存的key較為麻煩,第二種的缺點是每次用戶請求都需判斷緩存是否失效,邏輯相對比較復雜。具體選擇哪種方案,可根據應用場景權衡。
     
    五、緩存降級
     
    當訪問量劇增、服務出現問題(如響應時間慢或不響應)或非核心服務影響到核心流程的性能時,仍需保證服務可用,即使是有損服務。系統可以根據一些關鍵數據進行自動降級,也可配置開關實現人工降級。
     
    降級的最終目的是保證核心服務可用,即使是有損的,而且有些服務是無法降級的(如加入購物車、結算)。
     
    在進行降級之前要對系統進行梳理,確認哪些需要保護,哪些可降級;比如可參考日志級別設置預案:
     
    1.一般:有些服務偶爾因網絡抖動或者服務正在上線而超時,可自動降級;
     
    2.警告:有些服務在一段時間內成功率有波動(如在95~100%之間),可自動降級或人工降級,并發送警告;
     
    3.錯誤:可用率低于90%,或數據庫連接池被耗盡,或訪問量猛增到系統能承受的最大閥值,此時可根據情況自動降級或者人工降級;
     

    4.嚴重錯誤:因為特殊原因數據錯誤,此時需要緊急人工降級。


    武漢北大青鳥中南軟件學院

    咨詢電話:400-027-0822

    官方微博:@武漢北大青鳥中南軟件學院

    官方微信公眾號:whbdqngf

    咨詢QQ:2034934699

    武漢北大青鳥中南軟件學院地址:武漢市武昌區中南路中南大廈4-5樓

    武漢北大青鳥東湖校區地址:武漢市洪山區八一路延長線東湖路附15號


    關于我們
    公司簡介
    課程專業
    師資力量
    教學管理
    聯系方式
    青鳥課程
    ACCP
    學士后Java
    BENET
    啟蒙星IT工程師基礎課程
    UI設計
    回到首頁 92手95口98全身走什么意思,ass中国女明星裸体pic,KTV里给800小费能睡吗