摘要:緩存穿透場景當(dāng)通過一個(gè)去數(shù)據(jù)庫查詢出來的數(shù)據(jù)結(jié)果為緩存系統(tǒng)就不會(huì)緩存該數(shù)據(jù)每次該查詢都會(huì)經(jīng)過數(shù)據(jù)庫層造成沒有必要的開銷解決方案將該緩存至緩存系統(tǒng)中為一個(gè)特殊值緩存失效場景由于初始化的時(shí)候某些緩存過期時(shí)間設(shè)置的都一樣一段時(shí)間以后緩存全部失效在
緩存穿透
場景:當(dāng)通過一個(gè)key去數(shù)據(jù)庫查詢出來的數(shù)據(jù)結(jié)果為null,緩存系統(tǒng)就不會(huì)緩存該數(shù)據(jù),每次該key查詢都會(huì)經(jīng)過數(shù)據(jù)庫層,造成沒有必要的DB開銷
解決方案:將該key緩存至緩存系統(tǒng)中,value為一個(gè)特殊值(^^,&&...)
場景:由于初始化的時(shí)候某些緩存過期時(shí)間設(shè)置的都一樣,一段時(shí)間以后緩存全部失效,在這一瞬間的會(huì)增大DB的壓力
解決方案:在過期時(shí)間上加一個(gè)隨機(jī)值;分析用戶行為,盡量讓失效時(shí)間均勻分布
場景:key緩存過期失效而新緩存未到期間,該key的查詢所有請求都會(huì)去查詢數(shù)據(jù),造成DB壓力上升,不必要的DB開銷
解決方案:
加鎖排隊(duì)重建,使請求可以串行化,而不用全部的請求都去查詢數(shù)據(jù)庫
假設(shè)key的過期時(shí)間是A,創(chuàng)建一個(gè)key_sign,它的過期時(shí)間比A小,查詢key的時(shí)候檢查key_sign是否已經(jīng)過期,如果過期則加鎖后臺(tái)起一個(gè)線程異步去更新key的值,而實(shí)際的緩存沒有過期(如果實(shí)際緩存已經(jīng)過期,需要加鎖排隊(duì)重建),但是會(huì)浪費(fèi)雙份緩存
在原有的value中存一個(gè)過期值B,B比A小,取值的時(shí)候根據(jù)B判斷value是否過期,如果過期,解決方案同上
犧牲用戶體驗(yàn),當(dāng)發(fā)現(xiàn)緩存中沒有對應(yīng)的數(shù)據(jù)直接返回失敗,并且把需要的數(shù)據(jù)放入一個(gè)分布式隊(duì)列,后臺(tái)通過異步線程更新隊(duì)列中需要更新的緩存
緩存污染場景:一些非正常操作(導(dǎo)出excel,運(yùn)營偶發(fā)性訪問)而導(dǎo)致內(nèi)存中出現(xiàn)很多冷數(shù)據(jù)
解決方案:選取合適的緩存算法(LUR-N算法)
場景:緩存首次上線,如果網(wǎng)站的訪問量很大,所有的請求都經(jīng)過數(shù)據(jù)庫(如果訪問量比較少,可以由用戶訪問自行緩存)
解決方案:緩存預(yù)熱,在系統(tǒng)上線之前,所有的緩存都預(yù)先加載完畢(增加一個(gè)刷新緩存程序,上線后手動(dòng)刷新或發(fā)布時(shí)自動(dòng)調(diào)用刷用)
緩存失效策略:添加key的時(shí)候要設(shè)置一個(gè)過期時(shí)間,采用惰性刪除和定時(shí)刪除相結(jié)合的策略刪除過期鍵
多級(jí)緩存:線程級(jí)->內(nèi)存級(jí)->進(jìn)程級(jí)->文件(靜態(tài)資源)->分布式(redis)->Db結(jié)果.
二級(jí)緩存:二級(jí)緩存更多的解決是,緩存穿透與程序的健壯性,當(dāng)集中式緩存出現(xiàn)問題的時(shí)候,我們的應(yīng)用能夠繼續(xù)運(yùn)行;一些熱點(diǎn)數(shù)據(jù)做成內(nèi)存緩存,這些數(shù)據(jù)是在上線之前是已知的(比如說秒殺,大促商品),通過配置定時(shí)任務(wù)定時(shí)刷新內(nèi)存緩存,完成和分布式緩存的數(shù)據(jù)置換;更加自動(dòng)化的方案,可以根據(jù)上游自動(dòng)發(fā)現(xiàn)熱點(diǎn)數(shù)據(jù),廣播消息替換現(xiàn)在集群中內(nèi)存緩存的數(shù)據(jù)(但在整個(gè)集群中廣播,成本比較高,并且二級(jí)緩存的管理的成本也很大);
參考資料緩存穿透、并發(fā)和失效,來自一線架構(gòu)師的解決方案
那些年我們一起追過的緩存寫法
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21794.html
摘要:緩存穿透場景當(dāng)通過一個(gè)去數(shù)據(jù)庫查詢出來的數(shù)據(jù)結(jié)果為緩存系統(tǒng)就不會(huì)緩存該數(shù)據(jù)每次該查詢都會(huì)經(jīng)過數(shù)據(jù)庫層造成沒有必要的開銷解決方案將該緩存至緩存系統(tǒng)中為一個(gè)特殊值緩存失效場景由于初始化的時(shí)候某些緩存過期時(shí)間設(shè)置的都一樣一段時(shí)間以后緩存全部失效在 緩存穿透 場景:當(dāng)通過一個(gè)key去數(shù)據(jù)庫查詢出來的數(shù)據(jù)結(jié)果為null,緩存系統(tǒng)就不會(huì)緩存該數(shù)據(jù),每次該key查詢都會(huì)經(jīng)過數(shù)據(jù)庫層,造成沒有必要的D...
摘要:緩存穿透場景當(dāng)通過一個(gè)去數(shù)據(jù)庫查詢出來的數(shù)據(jù)結(jié)果為緩存系統(tǒng)就不會(huì)緩存該數(shù)據(jù)每次該查詢都會(huì)經(jīng)過數(shù)據(jù)庫層造成沒有必要的開銷解決方案將該緩存至緩存系統(tǒng)中為一個(gè)特殊值緩存失效場景由于初始化的時(shí)候某些緩存過期時(shí)間設(shè)置的都一樣一段時(shí)間以后緩存全部失效在 緩存穿透 場景:當(dāng)通過一個(gè)key去數(shù)據(jù)庫查詢出來的數(shù)據(jù)結(jié)果為null,緩存系統(tǒng)就不會(huì)緩存該數(shù)據(jù),每次該key查詢都會(huì)經(jīng)過數(shù)據(jù)庫層,造成沒有必要的D...
摘要:淺談網(wǎng)站性能之前端性能優(yōu)化性能優(yōu)化的目的無非是減少用戶流量消耗,提升用戶首屏體驗(yàn),提升用戶訪問速度,讓用戶專注內(nèi)容本身。前端性能優(yōu)化減少請求數(shù)量基本原理在瀏覽器與服務(wù)器進(jìn)行通信時(shí),主要是通過進(jìn)行通信。 最近項(xiàng)目慢慢走上正軌,需求趨于平穩(wěn),這才想起需要對整站進(jìn)行性能優(yōu)化。經(jīng)過一段時(shí)間的學(xué)習(xí),結(jié)合現(xiàn)在項(xiàng)目的實(shí)際性能情況,發(fā)現(xiàn)確實(shí)有許多地方可以進(jìn)行優(yōu)化。于是就開始了我的前端性能優(yōu)化之旅。以下...
摘要:淺談網(wǎng)站性能之前端性能優(yōu)化性能優(yōu)化的目的無非是減少用戶流量消耗,提升用戶首屏體驗(yàn),提升用戶訪問速度,讓用戶專注內(nèi)容本身。前端性能優(yōu)化減少請求數(shù)量基本原理在瀏覽器與服務(wù)器進(jìn)行通信時(shí),主要是通過進(jìn)行通信。 最近項(xiàng)目慢慢走上正軌,需求趨于平穩(wěn),這才想起需要對整站進(jìn)行性能優(yōu)化。經(jīng)過一段時(shí)間的學(xué)習(xí),結(jié)合現(xiàn)在項(xiàng)目的實(shí)際性能情況,發(fā)現(xiàn)確實(shí)有許多地方可以進(jìn)行優(yōu)化。于是就開始了我的前端性能優(yōu)化之旅。以下...
摘要:概念瀏覽器緩存是前端開發(fā)中經(jīng)常遇到的問題,它是提升性能同時(shí)減少服務(wù)器壓力的有效手段之一。服務(wù)器通過指定,告知代理服務(wù)器,需要緩存兩個(gè)版本壓縮和未壓縮。異常表現(xiàn)上述緩存有關(guān)的規(guī)律,并非所有瀏覽器都遵循,比如說。 概念 瀏覽器緩存是前端開發(fā)中經(jīng)常遇到的問題,它是提升性能同時(shí)減少服務(wù)器壓力的有效手段之一。 類型 1.強(qiáng)緩存 如果啟用了強(qiáng)緩存,請求資源時(shí)不會(huì)向服務(wù)器發(fā)送請求,直接從緩存中讀取資...
閱讀 2092·2023-04-25 20:52
閱讀 2472·2021-09-22 15:22
閱讀 2121·2021-08-09 13:44
閱讀 1765·2019-08-30 13:55
閱讀 2803·2019-08-23 15:42
閱讀 2278·2019-08-23 14:14
閱讀 2870·2019-08-23 13:58
閱讀 3001·2019-08-23 11:49