緩存層如何設(shè)計(jì)
馬克-to-win:我們前面講過了n-tier架構(gòu)。在我們的程序當(dāng)中,還可以設(shè)計(jì)一個(gè)緩存層。在去訪問數(shù)據(jù)庫之前,先看看緩存層中有沒有數(shù)據(jù),如果沒有的話,從數(shù)據(jù)庫取完數(shù)據(jù)回來,一定要放在緩存層當(dāng)中一份,下次就不用去數(shù)據(jù)庫了。馬克-to-win:如果對(duì)數(shù)據(jù)庫當(dāng)中,某個(gè)數(shù)據(jù)更新了,同時(shí)一定要記住也更新一下緩存當(dāng)中的數(shù)據(jù)。這樣的話,既保證了緩存的數(shù)據(jù)是最新的,也保證了將來查詢時(shí)不用去查數(shù)據(jù)庫,減輕了對(duì)數(shù)據(jù)庫的壓力。這里有些問題,問題1,如果除了你的項(xiàng)目,還有其他的地方可以更改數(shù)據(jù)庫,怎么辦?可以做一個(gè)守護(hù)線程,發(fā)現(xiàn)某個(gè)表的版本變了,就重新把表的數(shù)據(jù)加載回你的緩存。問題2,對(duì)于條件查詢,如何處理緩存?比如30元到50元的衣服數(shù)據(jù)的第二頁。大家通常的做法是,把整個(gè)衣服表都加載到緩存中,無非就是一個(gè) List,之后整個(gè)做個(gè)遍歷,把符合條件的選出來。為什么要整個(gè)加載?因?yàn)閯e人還有可能要查20到40塊錢的第五頁的數(shù)據(jù)。問題3,項(xiàng)目a處需要看表的 123列,b處需要看表的456列,緩存時(shí)就直接把123456列作為一個(gè)表緩存起來,供兩處使用。馬克-to-win:順便說一句,緩存也可以緩存圖片。數(shù)據(jù)庫和圖片服務(wù)器,可以認(rèn)為是大的倉庫,什么都能找到,而緩存可以看做是前端的商店,客戶經(jīng)常要買的東西就存一部分在商店,這樣可以提高效率。如果商店沒有相應(yīng)的商品,也不用著急,因?yàn)槲覀兒竺娴膫}庫肯定有。 馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。