中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解緩存

發布時間:2021-10-15 09:58:26 來源:億速云 閱讀:102 作者:iii 欄目:web開發

這篇文章主要介紹“如何理解緩存”,在日常操作中,相信很多人在如何理解緩存問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解緩存”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在計算機世界中,緩存(caching)就是將數據子集儲存到一個具備高度可訪問性的高速運行層的過程,這一層被稱作高速緩沖存儲器(cache)。

此過程旨在快速讀取使用率較高的數據,避免在存取之前的數據時產生額外的計算負擔。緩存只能儲存數據一小段時間,這是權衡容量后的選擇,以此換取更高的運行速度。

如何理解緩存

像隨機存取存儲器(RAM)和內存存儲引擎這類在緩存層下的硬件能夠實現快速存取,它們通常和軟件層一起被用于訪問數據。緩存基本上分為兩種:本地緩存和遠程緩存。本地緩存依靠JVW(Java虛擬機)堆進行儲存,而遠程(或集群)緩存使用內存存儲器,如Redis和Memcached。

什么是堆內本地緩存?

堆內緩存指把數據存儲于Java堆中,在這里數據由垃圾收集器(GC)自動管理。

堆內緩存的優點:

  • GC會自動分配和釋放對象

  • 訪問數據的速度更快

堆內緩存的不足:

  • GC停頓多發

  • 因為數據被存儲于JVM存儲器之中,如果JVM崩潰了,數據就會丟失。因此無法長期緩存。

什么是堆外本地緩存?

堆外緩存指把數據存儲在堆外。垃圾收集器不會自動處理這些數據,因為數據被存儲在Java堆外,所以它們以字節數組存儲,因此也存在把數據序列化和反序列化的額外運行負擔。

堆外緩存的優點:

  • 允許大量數據的緩存且無須擔心GC停頓

  • JVM崩潰后支持在存儲器中添加持久層以恢復數據

  • JVM之間可共享緩存數據

堆外緩存的不足:

  • 數據的序列化和反序列化是使用堆外緩存時最大的不便之處。這會為下層程序帶來計算負擔。因為沒有共同的數據結構,把序列化的數據轉換成單獨對象將付出額外的成本。

  • 短期數據更適合堆內緩存,因為它允許GC自動運行。因而,識別哪些數據可以被歸于堆內緩存會帶來額外的計算。

  • 手動存儲器管理(像存儲器分段之類的問題!)

總之,因為堆外緩存能夠長期存儲大量數據,所以它是存儲數據的一種更好方式。再加上大磁盤子系統,就能提高每秒讀寫次數(IOPS)。

什么是遠程緩存?

遠程緩存是將數據存儲在云端的緩沖區。因為可以在云端檢索數據,所以這有助于構建一個更堅固且性能更強的持久層。Redis和Memcached是當下兩款大受歡迎的內存緩存產品。

如何理解緩存

遠程緩存的優勢:

  • 遠程緩存集群可以根據需求進行擴展

  • 遠程緩存不僅僅局限于單一數據結構,并且它支持多語言編程,因而操作簡單。

  • 與磁盤的低速存取相比,性能有所增強(因為數據存儲在存儲器中,存取數據速度更快)

如何確定系統/服務需要緩存

  • 緩存命中率:如果服務所提供的數據不需要經常刷新且屬于經常檢索型數據,應當考慮緩存它們。

  • 最終一致性的容限:仔細考慮源數據的變化率,以及緩存的刷新頻率。還應該考慮服務對象是否重視最近數據的讀取。

緩存策略類型和相應挑戰

如何理解緩存

(1) 本地緩存:

通過在服務(比如說哈希表)內使用某種存儲方式將使本地緩存的執行更加容易,但也會導致緩存一致性問題。意思就是,不同服務器中的本地緩存不同,這將導致數據不一致。

例如,服務器S1用數據D1響應了請求R1,并把它存儲到本地緩存中。如果在數據庫中的數據被更新成D2版本,之后R1再次發出相同的請求,則有可能返回數據D1或D2,這取決于請求抵達了哪個服務器。

冷啟動也是內存緩存的一個重要問題。因為每一個服務器都是在沒有緩存的情況下啟動的,隨著新服務器的增加,甚至在部署期間,對下游依賴發出的請求數量也會隨之變多。這個問題可以通過請求合并解決。

(2) 外部緩存:

  • 能夠解決以上問題,因為外部緩存是分開存儲的,例如Redis和Memcached。

  • 提供更多存儲空間并減少因容量而導致的緩存淘汰。

  • 挑戰包括提高整體系統的復雜性和增加更多負載以維護額外的緩存服務器。

  • 始終在服務中添加代碼來解決緩存可能不可用的情況。

  • 可以在此期間呼叫下游服務。但如果緩存中斷時間過長,可能導致下游服務的負載增加。

  • 或者,外部存儲器和內部存儲器一起使用可以避免完全回落到下游依賴。

  • 也可以考慮采取減載技術,通過限制服務的請求數量來避免下游服務負載過重。

(3) 應對緩存擴展和彈性問題:

如果緩存達到最大容量,那么需要通過向其添加更多節點來擴展。深入了解系統及其在達到最大容量時的反應(例如,緩存達到最大容量時每個容器的內存利用率上升)有助于設置準確的警報。

這些警報可用于擴展緩存服務。在擴展服務時,需要記住兩件事:緩存集群是否支持在沒有宕機的情況下添加節點,或者是否支持一致性哈希算法來平衡流量分配。始終確保通過模擬故障來測試擴展策略。

(4) 控制數據的魯棒性

緩存數據應能夠讀取更新后的代碼格式,而更新后的代碼應能夠處理緩存所提供的舊版本數據。

緩存實現要點

如何理解緩存

(1) 緩存大小:根據服務中通過的數據類型可以確定緩存大小,以便提高緩存命中率。

(2) 緩存淘汰:這指的是當緩存達到最大容量時,把數據從緩存中移除。緩存淘汰最常見的模式是LRU(最近最少使用)。

(3) 緩存逾期:這是一種確定數據在緩存中的保留時間的策略,具體取決于數據刷新頻率或客戶處理過時數據的能力。

(4) 下游服務不可用

如果下游服務因為某些原因不可用,緩存服務不應該用更新數據的請求攻擊下游,而是能夠長期保護緩存,并等待它恢復。根據與客戶之間的權衡協調,要么報告緩存中的過時數據,避免請求令下游服務掉線,要么使用一種機制來存儲下游服務的錯誤響應,并對其進行相應的解釋說明。

(5) 安全性

正在緩存的敏感數據或客戶數據的安全性是人們對緩存集群的擔憂之一。敏感數據應在存儲前加密,并在輸入和輸出緩存數據的過程中確保其安全性。此外,由于緩存數據的返回速度比從數據庫獲取的調用速度快,攻擊者可以根據響應時間識別服務發出的請求類型,這被稱為側信道時序攻擊。

(6) “驚群效應”問題

下游服務不可用時,如果為了從下游服務獲取未緩存的數據而發出多個請求,則可能會引發多次重試,進而導致服務掉線。可以結合多個策略來緩解這個情況,例如按客戶或請求來進行節流、請求合并(即對相同的未緩存數據只發送一個請求)等。

緩存可以提供更快的數據訪問速度和提高下游服務可用性,但它的代價是緩存節點的處理會更加復雜。通過巧妙地理解下游服務的需求,可以得出一個緩存解決方案。在不同的情景中(如流量峰值、緩存不可用、下游服務掉線等)都應當對此解決方案的表現進行仔細監控以調整參數。

到此,關于“如何理解緩存”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达日县| 长阳| 通化市| 南涧| 台州市| 潞西市| 横山县| 绥棱县| 高淳县| 逊克县| 册亨县| 常州市| 石景山区| 郯城县| 卢氏县| 新余市| 仙居县| 巴东县| 兰考县| 旬邑县| 南宫市| 肇东市| 南昌市| 临武县| 丰顺县| 广州市| 贵德县| 宜宾县| 安顺市| 宜良县| 宾阳县| 岳西县| 彭水| 云梦县| 鞍山市| 日喀则市| 拉孜县| 巴彦县| 乳源| 穆棱市| 永福县|