java緩存技術(shù)有哪些 用了緩存了,數(shù)據(jù)庫就沒問題了嗎?
用了緩存了,數(shù)據(jù)庫就沒問題了嗎?當然不是。如果數(shù)據(jù)庫有問題,我們應該根據(jù)系統(tǒng)對數(shù)據(jù)庫的讀寫壓力來決定。通常當用戶達到一定水平后,我們會根據(jù)系統(tǒng)的業(yè)務特點進行相應的技術(shù)架構(gòu)調(diào)整和服務器擴展。讓我簡單介紹
用了緩存了,數(shù)據(jù)庫就沒問題了嗎?
當然不是。
如果數(shù)據(jù)庫有問題,我們應該根據(jù)系統(tǒng)對數(shù)據(jù)庫的讀寫壓力來決定。
通常當用戶達到一定水平后,我們會根據(jù)系統(tǒng)的業(yè)務特點進行相應的技術(shù)架構(gòu)調(diào)整和服務器擴展。讓我簡單介紹一下常見的中小互聯(lián)網(wǎng)公司的數(shù)據(jù)擴展過程。其過程大致如下:
單實例數(shù)據(jù)庫--->讀寫分離--->緩存服務--->多實例數(shù)據(jù)庫--->多實例緩存--->冷熱分離--->數(shù)據(jù)平臺沉淀--->分布式搜索引擎
當然,這個過程不是很嚴謹,但也很復雜非常粗糙。不同的業(yè)務系統(tǒng)需要不同的拆分和數(shù)據(jù)擴展方法。有些人甚至喜歡使用服務器本身的內(nèi)存來緩存一些數(shù)據(jù)。這里只是一個簡單的解釋,當系統(tǒng)給數(shù)據(jù)庫帶來壓力時,我們應該繼續(xù)做技術(shù)跟進。當然,隨著業(yè)務系統(tǒng)的發(fā)展,技術(shù)架構(gòu)往往是解耦的。技術(shù)架構(gòu)和業(yè)務架構(gòu)相輔相成。
這里是一個簡單的帖子,提供了一個常見的基本互聯(lián)網(wǎng)架構(gòu)圖:
如果您對系統(tǒng)架構(gòu)設(shè)計感興趣,請注意或查看我以前的答案。有信息共享。謝謝
cache breakdown
cache breakdown表示緩存中沒有用戶請求的數(shù)據(jù),但數(shù)據(jù)庫中有用戶請求的數(shù)據(jù)。此時,如果并發(fā)用戶多,無法通過緩存獲取數(shù)據(jù),只能從數(shù)據(jù)庫中獲取數(shù)據(jù),數(shù)據(jù)庫壓力瞬間增大,系統(tǒng)訪問速度慢。
Cache avalanche
Cache avalanche是指大量的緩存數(shù)據(jù)同時過期,當有大量的訪問時,會導致數(shù)據(jù)庫壓力的增加和停機時間的增加。
cache avalanche和cache breakdown的區(qū)別是cache avalanche是指大量數(shù)據(jù)的過期,cache breakdown是指單個cache的過期
根本原因是系統(tǒng)在設(shè)計時沒有設(shè)計合理的cache系統(tǒng)
對于熱數(shù)據(jù),可以考慮將其設(shè)置為永不過期,并手動處理熱數(shù)據(jù)
對于緩存數(shù)據(jù),設(shè)置過期時間是為了避免同時出現(xiàn)大量緩存數(shù)據(jù)失敗
我們可以考慮分布式配置緩存