成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

存儲 存儲軟件
在高并發或大數據的場景下,面對熱點數據的使用性能問題,緩存是常用的解決方式,主要作用包括將數據寫入速度更快的存儲設備;將數據緩存到離應用最近的位置;將數據緩存到離用戶最近的位置等。

 在高并發或大數據的場景下,面對熱點數據的使用性能問題,緩存是常用的解決方式,主要作用包括將數據寫入速度更快的存儲設備;將數據緩存到離應用最近的位置;將數據緩存到離用戶最近的位置等。

 

一、緩存雪崩

緩存雪崩可簡單理解為,由于原有緩存失效,新緩存未到期間(例如:我們設置緩存時采用了相同的過期時間,在同一時刻出現大面積的緩存過期),所有原本應該訪問緩存的請求都去查詢數據庫,對數據庫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.嚴重錯誤:因為特殊原因數據錯誤,此時需要緊急人工降級。

責任編輯:武曉燕 來源: 廈門安勝網絡科技有限公司
相關推薦

2021-07-22 09:55:28

瀏覽器前端緩存

2021-07-26 07:47:37

無鎖編程CPU

2017-05-09 08:27:42

分布式緩存技術Spring Redi

2023-11-20 08:10:55

處理器CPU緩存

2021-08-18 07:56:04

AndroidRecyclerVie復用

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2022-09-26 08:01:31

線程LIFO操作方式

2019-03-18 15:36:32

無服務器FaasServerless

2020-09-23 10:00:26

Redis數據庫命令

2019-06-25 10:32:19

UDP編程通信

2017-01-10 08:48:21

2024-02-21 21:14:20

編程語言開發Golang

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2017-08-15 13:05:58

Serverless架構開發運維

2025-06-05 05:51:33

2022-08-22 08:04:25

Spring事務Atomicity

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级免费片 | 国产99久久久国产精品下药 | 做a视频 | 日本三级做a全过程在线观看 | 天天草天天 | 欧美一级二级三级 | 国产激情一区二区三区 | 黄色大全免费看 | av毛片| 精品伦精品一区二区三区视频 | 秋霞a级毛片在线看 | 久久精品一区二区 | 色影视 | 国产精品一二三区 | 一区二区三区四区不卡 | 蜜桃精品视频在线 | 久久精选 | 日韩黄色免费 | 国产成人精品一区二区三区网站观看 | 国产精品不卡一区 | 最新中文在线视频 | 日韩波多野结衣 | 天天草天天爱 | 91久久国产综合久久 | 日本久久网 | 日本福利一区 | 国产高清久久久 | 久久精品视频一区二区三区 | 青青草原综合久久大伊人精品 | 欧美日韩在线播放 | 日韩国产精品一区二区三区 | 国产一区二区麻豆 | 国产精品美女久久久久aⅴ国产馆 | 国产精品久久久久久一区二区三区 | 伊人色综合久久天天五月婷 | 91精品在线播放 | 欧美国产视频 | 国产精品日韩一区二区 | 亚洲经典一区 | 精品久久一区 | 第一色在线|