亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Java緩存的知識點有哪些

發布時間:2022-02-23 14:54:13 來源:億速云 閱讀:163 作者:iii 欄目:開發技術

今天小編給大家分享一下Java緩存的知識點有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、緩存能用來做什么?

大多數人對于緩存的理解就是,當我們打開一個頁面或是一個APP,當它們打開的速度很慢的時候,都會想到引入緩存,這樣打開就會更快。

從技術這一方面來說,緩存之所以能夠提高訪問速度,是因為緩存是基于內存去建立的。而內存的讀寫速度相對于硬盤是快很多的,所以用內存代替硬盤作為讀寫的介質,自然就會大大提升了訪問數據的速度。

二、運用方式:預讀取和延遲寫

除了上述的過程之外,緩存另外兩個重要的運用方式:預讀取和延遲寫。

2.1 預讀取

從字面意思來看就是預先讀取,實際意義也確實如此。預讀取就是提前把將要讀取的數據載入,也就是在系統中把硬盤中的一部分數據提前加載到內存中,然后對外提供服務。

那么這么做的意義是什么?

因為有些系統一旦啟動就會有數以萬計的請求涌進來,假設讓這些請求直接打到數據庫上,非常大的可能就是會讓數據庫的壓力劇增,數據庫就會被掛掉,而導致無法正常響應。

預讀取就是為了解決這樣的問題。

2.2 延遲寫

如果說預讀取就是在數據出口加一道緩沖區,那么延遲寫則是在數據入口加一道緩沖區。

由于數據庫的寫入速度要比讀取速度慢,因此在寫入的時候就需要一系列的保證數據正確性的機制。所以,要想提升寫入速度,或是分庫分表,或是通過緩存加一道緩沖,再一次性批量寫入磁盤。引入分庫分表的復雜度遠大于引入緩存,一般都是優先考慮引入緩存的方案。

這種緩存方案就是延遲寫,它是預先將準備寫入磁盤或數據庫的數據,暫時寫入到內存,然后返回成功,再定時分批將內存中的數據寫入到磁盤。

三、哪些可以加緩存?

在緩存之前需要考慮我們要緩存的是什么?符合什么樣特點的數據才需要加緩存?因為緩存算是一個額外的成本投入,所以加了緩存要體現它的價值。

先引入衡量數據的兩個標準:

熱點數據:被高頻訪問,如每秒幾十次以上。

靜態數據:很少變動,讀取要大于寫入。

每個設立點都會擋掉一些流量,最終會形成以下的漏斗形效果,以此可以保護后面的系統以及最后的數據庫。

這些設立點就像是紅綠燈,如果沒有紅綠燈就容易發生事故,或是造成交通癱瘓等等。緩存設立點就是防止請求大量涌入,導致無法正常訪問。

四、緩存類別

上文已經羅列了緩存的幾種類別,接下我們將會對這些緩存類別進行介紹。

4.1 瀏覽器緩存

瀏覽器是離用戶最近的,可以用來作為緩存的地方,而且借助的是用戶的資源,性價比是幾種里面最好的,可以讓用戶分擔一些壓力。

進入瀏覽器的開發者工具,有 from cachefrom memory cache from disk cache 的時候,說明數據已經被緩存在用戶的終端設備上,在沒網的時候也可能訪問到一部分的內容就是這個原因。

瀏覽器會幫助我們完成這個過程,一般適用于圖片、 js 和 css等這些資源的緩存。

瀏覽器緩存的劣勢就是我們對它的掌控力比較差,沒有發起新的請求的情況下,是無法主動去更新數據。

4.2 CDN緩存

提供CDN服務的服務商,在全國乃至全世界部署了大量的服務節點。我們就可以將數據分發到遍布各地服務器上作為緩存,當用戶訪問時可以讀取就近的服務器上的緩存數據。這樣就可以分攤壓力和提升了加速效果。

要注意的是,由于節點眾多,更新緩存數據會比較慢,一般至少是分鐘級別,所以該緩存適用于不經常變動的靜態數據。

4.3 網關(代理)緩存

我們經常會在源站前面加上一層網管,目的是為了做一些安全機制或者作為同一分流策略的入口。

在這里設立一個緩存,能夠攔下來請求,其背后的源站也是收益很大的,減少了大量的 CPU 運算。常用的網關緩存有 VarnishSquidNginx

4.4 進程內緩存

一個請求能夠到這里來,說明是“業務相關”,需要經過業務邏輯的運算。從這里開始,對緩存的引入成本相對于前三者而言,要大大的增加了,這是因為對緩存與數據庫之間的‘數據一致性’要求更高了。

4.5 進程外緩存

這里是大多數程序員所熟悉的地方,就是 Redis Memcached 之類,或者也可以自己單獨寫一個程序來轉存放緩存數據,提供給其他程序遠程調用。

4.6 數據庫緩存

數據庫緩存是數據庫的內部機制,一般都會給出設置緩存空間大小的配置來讓你進行干預。

最后,磁盤本身也是有緩存的,所以能夠讓數據平穩地寫入到磁盤,可謂是經歷了一波三折。

五、緩存可能出現的問題

既然緩存作用如此大,那是不是就越多越好呢?只要速度慢就加緩存來解決?其實不然,緩存既有好的一面,也會有負面的一面。

5.1 緩存雪崩

問題:大量請求并發進入緩存時,可能由于某些原因緩沖效果未能正常執行,即便是在很短的時間內,就會導致請求全部轉入數據庫,從而造成數據庫壓力過重。

解決:可以通過“加鎖排隊”或者“緩存時間增加隨機值”來解決此類問題。

5.2 緩存穿透

和緩存雪崩很相似,區別在于穿透會持續更長的時間。這是因為每次的 cache miss 后依然無法從數據源把數據加載到緩存,導致持續產生cache miss

可以通過“布隆過濾器”或者“緩存空對象”來解決此類問題。

5.3 緩存并發

一個緩存 key 下的數據被同時 set,怎么保證業務的準確性?如果進程內、進程外、數據庫三者的緩存一起用的情況下?

使用“先DB再緩存”的方式,并且緩存操作用 delete 而不是 set。

5.4 緩存無底洞

雖然分布式緩存是可以無線橫向擴展的,但是,集群下的節點也不是越多越好。緩存也是符合“邊際效用遞減”規律的。

5.5 緩存淘汰

內存的容量是有限的,如果請求的數據量是大量的,那么根據具體情況進行一定的淘汰策略是必不可少的。例如:LRULFUFIFO等等。

以上就是“Java緩存的知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

西乡县| 万安县| 通海县| 灵石县| 神池县| 石泉县| 获嘉县| 晋城| 英德市| 郯城县| 尖扎县| 渑池县| 洞头县| 陇川县| 安吉县| 元阳县| 广灵县| 栾城县| 湖北省| 宜都市| 平塘县| 全州县| 波密县| 岚皋县| 綦江县| 平顶山市| 罗山县| 铁岭市| 珲春市| 扎兰屯市| 清原| 三台县| 廉江市| 南宫市| 古蔺县| 万载县| 泾源县| 象山县| 纳雍县| 屯留县| 新田县|