国产不卡一区二区三区在线_日韩黄色毛片成人免费观看_观看在线人成电影大全_深夜国产福利一区_麻豆91啪啪视频_AA丁香综合激情_午夜福利院国产精品欧美一区_日韩三级黄色毛片_无码中文高清影视_亚洲色大成网址在线观看

技術(shù)支持 Support
搜索 Search
你的位置:首頁 > 技術(shù)支持

什么是本地緩存、分布式緩存以及多級緩存?

2023/1/7 22:19:06      點擊:

像MySql等傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)不能適用于所有的業(yè)務(wù)場景,比如電商系統(tǒng)的秒殺場景,APP首頁的訪問流量高峰場景,很容易造成關(guān)系型數(shù)據(jù)庫的癱瘓,隨著緩存技術(shù)的出現(xiàn)很好的解決了這題。

一、緩存的概念(什么是緩存)

緩存就是把訪問量較高的熱點數(shù)據(jù)從傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中加載到內(nèi)存中,當(dāng)用戶再次訪問熱點數(shù)據(jù)時是從內(nèi)存中加載,減少了對數(shù)據(jù)庫的訪問量,解決了高并發(fā)場景下容易造成數(shù)據(jù)庫宕機(jī)的問題。

二、為什么要用緩存(為什么要用redis作為緩存)

針對于這個問題要從兩個方面去考慮,一個是應(yīng)用系統(tǒng)的高并發(fā)場景,另一個就是應(yīng)用系統(tǒng)的高性能情況。

1、高性能情況: 用戶第一次訪問數(shù)據(jù)時,緩存中沒有數(shù)據(jù),要從數(shù)據(jù)庫中獲取數(shù)據(jù),因為是從磁盤中拿數(shù)據(jù),讀取數(shù)據(jù)的過程比較慢。拿到數(shù)據(jù)后將數(shù)據(jù)存儲在緩存中,用戶第二次訪問數(shù)據(jù)時,可以從緩存中直接獲取,因為緩存是直接操作內(nèi)存的,訪問數(shù)據(jù)速度比較快。

2、高并發(fā)場景下: 操作緩存能夠承受的并發(fā)訪問量是遠(yuǎn)遠(yuǎn)大于訪問數(shù)據(jù)庫的,比如redis,它的讀的速度是110000次/s,寫的速度是81000次/s。所以說將數(shù)據(jù)庫中訪問量高的數(shù)據(jù)存儲到緩存中,用戶請求的時候直接訪問數(shù)據(jù)庫,不必訪問數(shù)據(jù)庫,提高應(yīng)用程序的并發(fā)量。

三、緩存的分類有哪些

緩存基本上分為三類:本地緩存、分布式緩存、多級緩存。根據(jù)緩存和應(yīng)用程序是否屬于同一個進(jìn)程,將緩存分為本地緩存和分布式緩存;诒镜鼐彺婧头植际骄彺娑加懈髯缘膬(yōu)點和缺點,后面又出現(xiàn)了多級緩存的概念。

1、本地緩存

本地緩存的概念:

本地緩存是指和應(yīng)用程序在同一個進(jìn)程內(nèi)的內(nèi)存空間去存儲數(shù)據(jù),數(shù)據(jù)的讀寫都是在同一個進(jìn)程內(nèi)完成的。

本地緩存優(yōu)點:

讀取速度快,但是不能進(jìn)行大數(shù)據(jù)量存儲。

本地緩存不需要遠(yuǎn)程網(wǎng)絡(luò)請求去操作內(nèi)存空間,沒有額外的性能消耗,所以讀取速度快。

本地緩存缺點:

應(yīng)用程序集群部署時,會存在數(shù)據(jù)更新問題(數(shù)據(jù)更新不一致)

本地緩存一般只能被同一個應(yīng)用進(jìn)程的程序訪問,不能被其他應(yīng)用程序進(jìn)程訪問。在單體應(yīng)用集群部署時,如果數(shù)據(jù)庫有數(shù)據(jù)需要更新,就要同步更新不同服務(wù)器節(jié)點上的本地緩存的數(shù)據(jù)來保證數(shù)據(jù)的一致性,但是這種操作的復(fù)雜度高,容易出錯?梢曰趓edis的發(fā)布/訂閱機(jī)制來實現(xiàn)各個部署節(jié)點的數(shù)據(jù)同步更新。

數(shù)據(jù)會隨著應(yīng)用程序的重啟而丟失

因為本地緩存的數(shù)據(jù)是存儲在應(yīng)用進(jìn)程的內(nèi)存空間的,所以當(dāng)應(yīng)用進(jìn)程重啟時,本地緩存的數(shù)據(jù)會丟失。

本地緩存的實現(xiàn):

(1)、緩存存儲的數(shù)據(jù)一般都是key-value鍵值對的數(shù)據(jù)結(jié)構(gòu)。

(2)、除了上面說的實現(xiàn)方式以外,也可以用Guava、Ehcache以及Caffeine等封裝好的工具包來實現(xiàn)本地緩存。

2、分布式緩存

分布式緩存概念:

分布式緩存是獨立部署的服務(wù)進(jìn)程,并且和應(yīng)用程序沒有部署在同一臺服務(wù)器上。所以是需要通過遠(yuǎn)程網(wǎng)絡(luò)請求來完成分布式緩存的讀寫操作,并且分布式緩存主要應(yīng)用在應(yīng)用程序集群部署的環(huán)境下。

分布式緩存優(yōu)點:

支持大數(shù)據(jù)量存儲

分布式緩存是獨立部署的進(jìn)程,擁有自身獨自的內(nèi)存空間,不需要占用應(yīng)用程序進(jìn)程的內(nèi)存空間,并且還支持橫向擴(kuò)展的集群方式部署,所以可以進(jìn)行大數(shù)據(jù)量存儲。

數(shù)據(jù)不會隨著應(yīng)用程序重啟而丟失

分布式緩存和本地緩存不同,擁有自身獨立的內(nèi)存空間,不會受到應(yīng)用程序進(jìn)程重啟的影響,在應(yīng)用程序重啟時,分布式緩存的存儲數(shù)據(jù)仍然存在。

數(shù)據(jù)集中存儲,保證數(shù)據(jù)的一致性

當(dāng)應(yīng)用程序采用集群方式部署時,集群的每個部署節(jié)點都有一個統(tǒng)一的分布式緩存進(jìn)行數(shù)據(jù)的讀寫操作,所以不會存在像本地緩存中數(shù)據(jù)更新問題,保證了不同服務(wù)器節(jié)點的 數(shù)據(jù)一致性。

數(shù)據(jù)讀寫分離,高性能,高可用

分布式緩存一般支持?jǐn)?shù)據(jù)副本機(jī)制,實現(xiàn)讀寫分離,可以解決高并發(fā)場景中的數(shù)據(jù)讀寫性能問題。而且在多個緩存節(jié)點冗余存儲數(shù)據(jù),提高了緩存數(shù)據(jù)的可用性,避免某個緩存節(jié)點宕機(jī)導(dǎo)致數(shù)據(jù)不可用問題。

分布式緩存缺點:

數(shù)據(jù)跨網(wǎng)絡(luò)傳輸,讀寫性能不如本地緩存

分布式緩存是一個獨立的服務(wù)進(jìn)程,并且和應(yīng)用程序進(jìn)程不在同一臺機(jī)器上,所以數(shù)據(jù)的讀寫要通過遠(yuǎn)程網(wǎng)絡(luò)請求,這樣相對于本地緩存的數(shù)據(jù)讀寫,性能要低一些。

分布式緩存的實現(xiàn):

分布式緩存的典型實現(xiàn)包括 MemCached 和 Redis。

3、多級緩存

基于本地緩存和分布式緩存的優(yōu)缺點,多級緩存應(yīng)運而生,在實際的業(yè)務(wù)開發(fā)中一般也是采用多級緩存。

注意:本地緩存一般存儲更新頻率低,訪問頻率高數(shù)據(jù),分布式緩存一般存儲更新頻率很高的數(shù)據(jù)。

多級緩存的請求流程: 本地緩存作為一級緩存,分布式緩存作為二級緩存;當(dāng)用戶獲取數(shù)據(jù)時,先從一級緩存中獲取數(shù)據(jù),如果一級緩存有數(shù)據(jù)則返回數(shù)據(jù),否則從二級緩存中獲取數(shù)據(jù)。如果二級緩存中有數(shù)據(jù)則更新一級緩存,然后將數(shù)據(jù)返回客戶端。如果二級緩存沒有數(shù)據(jù)則去數(shù)據(jù)庫查詢數(shù)據(jù),然后更新二級緩存,接著再更新一級緩存,最后將數(shù)據(jù)返回給客戶端。

多級緩存的實現(xiàn): 可以使用Guava或者Caffeine作為一級緩存,Redis作為二級緩存。

注意:在應(yīng)用程序集群部署時,如果數(shù)據(jù)庫的數(shù)據(jù)有更新的情況,一級緩存的數(shù)據(jù)更新容易出現(xiàn)數(shù)據(jù)不一致的情況。因為是集群部署,多個部署節(jié)點實現(xiàn)一級緩存數(shù)據(jù)更新難度比較大,不過我們可以通過Redis的消息發(fā)布/訂閱機(jī)制來實現(xiàn)多個節(jié)點緩存數(shù)據(jù)一致性問題。


文章來源:騰訊,如涉及到版權(quán)問題,請聯(lián)系網(wǎng)站管理員刪除!