微信掃描二維碼關注后回復「電子書」,獲取12本Java必讀技術書籍,人物背景:
老徐,男,本名徐福貴,從事Java相關研發作業多年,職場老油條,摸魚小能手,雖然歲數不大但長的比較著急,人稱老徐,據說之前炒某幣敗光了所有家產,甚至現在還有欠債,
阿珍,女,本名陳家珍,剛剛入職不久的實習生,雖然是職場菜鳥但聰明好學,據說是學校的四大校花之一,追求她的人從旺角排到了銅鑼灣,不過至今還單身,
阿珍:“在高并發下遇到瓶頸的時候,經常會用到快取來提高整個系統的性能,”
老徐:“嗯,不過快取能夠大大提升整個系統的性能,但同時也引入了更多復雜性,”
阿珍點了點頭,說:“是啊,快取穿透、快取擊穿、快取雪崩、快取熱點這些東西,這些東西我一直分不清楚,經常混淆,”
老徐立刻自信滿滿地說:“這個我懂啊,你聽我給你娓娓道來,”
快取穿透
快取穿透是指在查詢快取資料時,快取和資料庫中都沒有對應資料,在快取中找不到對應的資料,每次都要去資料庫中再查詢一遍,然后回傳資料不存在,
在這個場景中,快取并沒有起到分擔資料庫訪問壓力的作用,讀取不存在的資料的請求量一般不會太大,但如果出現一些惡意攻擊,故意大量訪問某些不存在的資料,就會對資料庫造成很多壓力,
阿珍:“太可怕了,萬一遇到了這樣攻擊,該怎么辦呀?”
老徐:“這個很好應對的,一般有兩種辦法,”
第一個是:如果查詢資料庫中的資料沒有找到,則直接設定一個特定值存到快取中,之后讀取快取時就會獲取到這個特定值,直接回傳空值,就不會繼續訪問資料庫了,
第二個是:把已存在資料的key存放在布隆過濾器中,當有新的請求時,先到布隆過濾器中查詢是否存在,如果不存在該條資料直接回傳;如果存在該條資料再查詢快取查詢資料庫,
微信掃描二維碼關注后回復「電子書」,獲取12本Java必讀技術書籍,
快取擊穿
快取擊穿是指在查詢快取資料時,資料庫原本有得資料,但是快取中沒有,生成快取資料需要耗費較長時間或者大量資源,這時候如果有大量請求該資料,會對資料庫甚至系統造成較大壓力,
阿珍:“哦?該怎么解決呀?”
老徐:“這個很好解決,一般有兩個做法,”
第一個是:對快取更新操作加入鎖的保護,保證只有一個執行緒能夠進行快取更新的操作,沒有獲取更新鎖的執行緒要么等待鎖釋放后重新讀取快取,要么直接回傳空值或者默認值,
第二個是:后臺作業定時更新快取,而不是在訪問頁面時生成快取資料,這樣可以按照一定策略定時更新快取,不會對存盤系統較大的瞬時壓力,
微信掃描二維碼關注后回復「電子書」,獲取12本Java必讀技術書籍,
快取雪崩
快取雪崩是指當大量快取同時失效或過期后,大量請求直接訪問對資料庫,甚至耗費較長時間或者大量資源計算快取結果,引起系統性能的急劇下降,
阿珍搶先說道:“這個我知道怎么解決!”老徐反問:“怎么解決?”
阿珍回答:“同一型別的快取的過期時間可以設定一個隨機值,比如:原來的過期時間是5分鐘,在此基礎上加060秒,那么過期時間就變為在56分鐘內波動,有效防止都在同一個時間點上大量快取過期,”
快取熱點
快取熱點是指大部分甚至所有的業務請求都命中同一份快取資料,
雖然快取本身的性能比較高,但對于一些特別熱點的資料,如果大部分甚至所有的請求都命中同一份快取資料,則這份資料所在的快取服務器的壓力也會很大,比如,電商的爆品秒殺活動,短時間內被上千萬的用戶訪問,
阿珍:“遇到了這種情況,該怎么辦呀?”
老徐:“這個很好解決的,一般有兩種辦法:復制多份快取副本和本地記憶體快取,”
復制多份快取副本,就是將請求分散到多個快取服務器上,減輕快取熱點導致的單臺快取服務器壓力,在設計快取副本的時候,有一個細節需要注意:不同的快取副本不要設定統一的過期時間,否則就會出現所有快取副本同時生成同時失效的情況,從而引發快取的雪崩效應,
微信掃描二維碼關注后回復「電子書」,獲取12本Java必讀技術書籍,
把熱點資料快取在客戶端的本地記憶體中,并且設定一個失效時間,對于每次讀請求,將首先檢查該資料是否存在于本地快取中,如果存在則直接回傳,如果不存在再去訪問分布式快取的服務器,
阿珍用崇拜的眼神看著老徐,說:“老徐,你太牛了,什么都懂!”
老徐不好意思地撓了撓頭,說:“也沒有了,”
微信掃描二維碼關注后回復「電子書」,獲取12本Java必讀技術書籍,
最后,謝謝你這么帥,還給我點贊和關注,
作者:萬貓學社
出處:http://www.cnblogs.com/heihaozi/
著作權宣告:本文遵循 CC 4.0 BY-NC-SA 著作權協議,轉載請附上原文出處鏈接和本宣告,
微信掃描二維碼,關注萬貓學社,回復「電子書」,免費獲取12本Java必讀技術書籍,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/451215.html
標籤:Java
上一篇:基于JDK的動態代理原理分析
