日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 技術(shù)前線
[導(dǎo)讀]在高性能服務(wù)架構(gòu)設(shè)計(jì)中,緩存是不可或缺的環(huán)節(jié)。在實(shí)際項(xiàng)目中,我們通常會(huì)將一些熱點(diǎn)數(shù)據(jù)存儲(chǔ)在Redis或Memcached等緩存中間件中,只有在緩存訪問未命中時(shí)才查詢數(shù)據(jù)庫(kù)。

設(shè)計(jì)強(qiáng)悍的本地緩存需綜合考慮數(shù)據(jù)結(jié)構(gòu)、淘汰策略、更新機(jī)制及監(jiān)控功能,以下是關(guān)鍵設(shè)計(jì)要點(diǎn):

核心設(shè)計(jì)原則

?數(shù)據(jù)結(jié)構(gòu)選擇?:優(yōu)先使用ConcurrentHashMap等線程安全的數(shù)據(jù)結(jié)構(gòu),避免并發(fā)訪問時(shí)的性能瓶頸。 ?1?淘汰策略?:推薦使用LRU(最近最少使用)或FIFO(先進(jìn)先出)策略,結(jié)合容量限制確保內(nèi)存高效利用。 ?

?更新策略?:采用Write-Through(寫時(shí)穿透)或Write-Behind(寫后延遲)策略,平衡數(shù)據(jù)一致性和寫入性能。 ?

性能優(yōu)化

?過期策略?:支持基于創(chuàng)建時(shí)間或訪問時(shí)間的動(dòng)態(tài)過期機(jī)制,例如設(shè)置5分鐘未訪問則自動(dòng)失效。 ?

?多級(jí)緩存架構(gòu)?:結(jié)合分布式緩存(如Redis)作為后備,提升命中率并減少數(shù)據(jù)庫(kù)壓力。 ?

監(jiān)控與維護(hù)

?動(dòng)態(tài)調(diào)整?:通過緩存命中率、寫入延遲等指標(biāo)動(dòng)態(tài)調(diào)整容量和策略。 ?

?異常處理?:設(shè)置緩存失效回退機(jī)制,避免因緩存故障導(dǎo)致服務(wù)中斷。 ?

典型應(yīng)用場(chǎng)景

?高頻訪問靜態(tài)數(shù)據(jù)?:如系統(tǒng)配置、字典表等,命中率可達(dá)90%以上。 ?

?實(shí)時(shí)性要求低的數(shù)據(jù)?:如商品分類列表,可設(shè)置較長(zhǎng)的過期時(shí)間(如1小時(shí))。 ?

工具選擇

?Java框架?:Guava、Caffeine提供豐富的API和監(jiān)控功能,適合復(fù)雜業(yè)務(wù)場(chǎng)景。 ?

?內(nèi)存管理?:通過maximumSize限制內(nèi)存占用,避免OOM異常。 ?

緩存是一種常見的技術(shù),目標(biāo)是提高系統(tǒng)的性能和可伸縮性。 緩存將經(jīng)常訪問的數(shù)據(jù)暫時(shí)復(fù)制到靠近應(yīng)用程序的快速存儲(chǔ)。 當(dāng)快速數(shù)據(jù)存儲(chǔ)比其原始數(shù)據(jù)存儲(chǔ)更靠近應(yīng)用程序時(shí),緩存可以通過更快地提供數(shù)據(jù),大幅改善客戶端應(yīng)用程序的響應(yīng)時(shí)間。

當(dāng)客戶端實(shí)例重復(fù)讀取同一數(shù)據(jù)時(shí),緩存是最有效的方式,尤其是在原始數(shù)據(jù)存儲(chǔ)存在以下情況時(shí):

原始數(shù)據(jù)存儲(chǔ)保持相對(duì)靜態(tài)。

受限于激烈的資源爭(zhēng)用。

它距離很遠(yuǎn),網(wǎng)絡(luò)延遲可能會(huì)導(dǎo)致對(duì)存儲(chǔ)的訪問速度變慢。

假設(shè) Tailwind Traders 正在向產(chǎn)品演示應(yīng)用程序添加一項(xiàng)新功能,以增加其零售網(wǎng)站的客戶流量。 事件功能在移動(dòng)應(yīng)用頂部添加了一個(gè)橫幅,以宣布特價(jià)優(yōu)惠和有限的產(chǎn)品折扣。 新優(yōu)惠在整點(diǎn)發(fā)布,每種優(yōu)惠的剩余產(chǎn)品可用性在每個(gè)訂單得到處理后更新。 第一位響應(yīng)新優(yōu)惠的客戶將獲得雙倍折扣! 建議客戶經(jīng)常查看其移動(dòng)應(yīng)用,了解優(yōu)惠和產(chǎn)品可用性的相關(guān)更新。 若要實(shí)現(xiàn)這項(xiàng)新功能,你需要設(shè)計(jì)一個(gè)可支持內(nèi)存中快速讀取和寫入的緩存解決方案。

1. 確定緩存需求

分析業(yè)務(wù)場(chǎng)景:明確哪些數(shù)據(jù)需要緩存。通常,訪問頻繁、變化頻率低的數(shù)據(jù)適合緩存,如商品分類列表、系統(tǒng)配置參數(shù)等。而實(shí)時(shí)性要求極高、頻繁變動(dòng)的數(shù)據(jù)(如股票價(jià)格、即時(shí)聊天消息)可能不適合長(zhǎng)時(shí)間緩存。

設(shè)定性能目標(biāo):確定緩存機(jī)制要達(dá)到的性能指標(biāo),例如緩存命中率要達(dá)到多少(一般建議 80%以上),緩存數(shù)據(jù)的讀取和寫入延遲控制在什么范圍內(nèi)等。

2. 選擇緩存技術(shù)

內(nèi)存緩存:

Redis:是最常用的內(nèi)存緩存之一,支持多種數(shù)據(jù)結(jié)構(gòu)(如字符串、哈希、列表、集合等),具有高性能、可持久化、分布式等特點(diǎn)。適用于各種規(guī)模的應(yīng)用,能滿足不同業(yè)務(wù)場(chǎng)景下的數(shù)據(jù)緩存需求。

Memcached:也是一款流行的內(nèi)存緩存系統(tǒng),專注于簡(jiǎn)單的鍵值存儲(chǔ),在處理高并發(fā)讀寫時(shí)性能出色。常用于緩存數(shù)據(jù)庫(kù)查詢結(jié)果、網(wǎng)頁(yè)片段等。

分布式緩存:

Apache Ignite:提供分布式內(nèi)存計(jì)算和數(shù)據(jù)存儲(chǔ)功能,支持集群環(huán)境下的緩存管理,具備強(qiáng)大的容錯(cuò)性和可擴(kuò)展性,適合大規(guī)模分布式系統(tǒng)。

Couchbase:是一個(gè)分布式文檔數(shù)據(jù)庫(kù),同時(shí)也可作為高性能緩存使用,支持多數(shù)據(jù)中心部署,能滿足復(fù)雜的企業(yè)級(jí)應(yīng)用需求。

3. 設(shè)計(jì)緩存結(jié)構(gòu)

鍵值設(shè)計(jì):

鍵的設(shè)計(jì):確保緩存鍵的唯一性和可讀性。鍵名應(yīng)能清晰反映緩存數(shù)據(jù)的內(nèi)容,例如以 “category_list_${language}_${version}” 表示特定語(yǔ)言和版本的商品分類列表緩存鍵。同時(shí),要避免鍵名過長(zhǎng),以免占用過多內(nèi)存和影響查詢效率。

值的設(shè)計(jì):根據(jù)數(shù)據(jù)類型和業(yè)務(wù)需求選擇合適的值結(jié)構(gòu)。對(duì)于簡(jiǎn)單數(shù)據(jù),直接使用字符串存儲(chǔ)即可;對(duì)于復(fù)雜對(duì)象,可以序列化為 JSON 或二進(jìn)制格式(如 Protocol Buffers)后存儲(chǔ),以節(jié)省內(nèi)存空間。

緩存分區(qū):

按功能分區(qū):將不同業(yè)務(wù)功能的數(shù)據(jù)緩存到不同區(qū)域,如用戶相關(guān)緩存、商品相關(guān)緩存等,便于管理和維護(hù)。

按數(shù)據(jù)熱度分區(qū):把熱門數(shù)據(jù)和冷門數(shù)據(jù)分開緩存。熱門數(shù)據(jù)可以放在高性能的緩存區(qū)域或設(shè)置較短的過期時(shí)間以保證數(shù)據(jù)新鮮度;冷門數(shù)據(jù)則可以存儲(chǔ)在相對(duì)較慢但成本較低的存儲(chǔ)介質(zhì)中,或者設(shè)置較長(zhǎng)的過期時(shí)間。

4. 緩存策略

緩存過期策略:

絕對(duì)過期時(shí)間:為緩存數(shù)據(jù)設(shè)置固定的過期時(shí)間,到期后緩存自動(dòng)失效。例如,對(duì)于一些時(shí)效性較強(qiáng)的新聞資訊緩存,可設(shè)置 1 小時(shí)的過期時(shí)間。

滑動(dòng)過期時(shí)間:每次訪問緩存數(shù)據(jù)時(shí),自動(dòng)延長(zhǎng)其過期時(shí)間。適用于經(jīng)常被訪問的數(shù)據(jù),如熱門商品詳情緩存,只要有用戶訪問,就保持緩存的有效性。

緩存更新策略:

寫后更新:在數(shù)據(jù)發(fā)生變化后,立即更新緩存。這種方式簡(jiǎn)單直接,但可能會(huì)導(dǎo)致短時(shí)間內(nèi)緩存數(shù)據(jù)與實(shí)際數(shù)據(jù)不一致。例如,在更新商品價(jià)格后,馬上更新對(duì)應(yīng)的商品價(jià)格緩存。

讀寫鎖策略:在讀取緩存時(shí)加讀鎖,允許多個(gè)線程同時(shí)讀取;在更新緩存時(shí)加寫鎖,獨(dú)占緩存資源,確保數(shù)據(jù)一致性。這種策略適用于讀多寫少的場(chǎng)景。

緩存淘汰策略:

LRU(最近最少使用):當(dāng)緩存達(dá)到最大容量時(shí),淘汰最近最少使用的緩存數(shù)據(jù)。許多緩存庫(kù)(如 Redis)都支持 LRU 淘汰策略,它能保證經(jīng)常使用的數(shù)據(jù)始終留在緩存中。

LFU(最不經(jīng)常使用):淘汰使用頻率最低的緩存數(shù)據(jù)。與 LRU 不同,LFU 更關(guān)注數(shù)據(jù)的使用頻率,而非最近使用時(shí)間。

5. 緩存一致性

雙寫模式:在更新數(shù)據(jù)庫(kù)的同時(shí)更新緩存,確保兩者數(shù)據(jù)一致。但要注意操作順序和可能出現(xiàn)的并發(fā)問題,例如先更新緩存再更新數(shù)據(jù)庫(kù)時(shí),如果數(shù)據(jù)庫(kù)更新失敗,可能導(dǎo)致數(shù)據(jù)不一致。

失效模式:更新數(shù)據(jù)庫(kù)時(shí),使關(guān)緩存失效,下次讀取時(shí)重新從數(shù)據(jù)庫(kù)加載數(shù)據(jù)并更新緩存。這種方式相對(duì)簡(jiǎn)單,但可能會(huì)在緩存失效期間出現(xiàn)短暫的數(shù)據(jù)不一致。

在高性能服務(wù)架構(gòu)設(shè)計(jì)中,緩存是不可或缺的環(huán)節(jié)。在實(shí)際項(xiàng)目中,我們通常會(huì)將一些熱點(diǎn)數(shù)據(jù)存儲(chǔ)在Redis或Memcached等緩存中間件中,只有在緩存訪問未命中時(shí)才查詢數(shù)據(jù)庫(kù)。

在提高訪問速度的同時(shí),還可以減輕數(shù)據(jù)庫(kù)的壓力。

為什么要使用本地緩存?

隨著不斷的發(fā)展,這個(gè)架構(gòu)也得到了完善。在某些場(chǎng)景下,僅僅使用Redis類的遠(yuǎn)程緩存可能還不夠。需要進(jìn)一步與本地緩存配合使用,比如Guava或者Caffeine,從而再次提高程序的響應(yīng)速度和服務(wù)性能。

由此,形成了以本地緩存作為一級(jí)緩存、遠(yuǎn)程緩存作為二級(jí)緩存的二級(jí)緩存架構(gòu)。

總結(jié):

本地緩存基于本地環(huán)境的內(nèi)存,訪問速度非???。對(duì)于一些變化頻率不高、實(shí)時(shí)性要求不高的數(shù)據(jù),可以放在本地緩存中,以提高訪問速度。

使用本地緩存可以減少與Redis類的遠(yuǎn)程緩存的數(shù)據(jù)交互,減少網(wǎng)絡(luò)I/O開銷,減少這個(gè)過程中網(wǎng)絡(luò)通信的耗時(shí)。

本地存儲(chǔ)的基本功能

它可以存儲(chǔ)、讀取和寫入。

原子操作(線程安全),例如ConcurrentHashMap。

可以設(shè)置緩存的最大限制。

超過最大限制有相應(yīng)的淘汰策略,如LRU、LFU。

統(tǒng)計(jì)監(jiān)控。

方案選擇

1.使用ConcurrentHashMap。

緩存的本質(zhì)是KV存儲(chǔ)在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),對(duì)應(yīng)JDK中的線程安全ConcurrentHashMap,但是要實(shí)現(xiàn)緩存,需要考慮消除、最大限制、消除緩存過期時(shí)間等功能。

優(yōu)點(diǎn)ConcurrentHashMap是實(shí)現(xiàn)簡(jiǎn)單,不需要引入第三方包,所以比較適合一些簡(jiǎn)單的業(yè)務(wù)場(chǎng)景。

缺點(diǎn)是如果需要更多的功能,需要定制開發(fā),成本會(huì)比較高,穩(wěn)定性和可靠性難以保證。

對(duì)于更復(fù)雜的場(chǎng)景,建議使用相對(duì)穩(wěn)定的開源工具。

2. 使用Guava緩存

Guava是Google團(tuán)隊(duì)開源的一個(gè)Java核心增強(qiáng)庫(kù)。它包括集合、并發(fā)原語(yǔ)、緩存、IO、反射和其他工具箱。性能和穩(wěn)定性有保證,應(yīng)用廣泛。

Guava Cache 支持許多功能:

支持最大容量限制。

支持兩種過期刪除策略。

支持簡(jiǎn)單的統(tǒng)計(jì)功能。 它是基于LRU算法實(shí)現(xiàn)的。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉