這里的緩存指的是分布式緩存,而非應(yīng)用程序本身的內(nèi)存。
合理使用緩存,能把應(yīng)用的訪問速度大大的提升。
假設(shè)一個(gè)數(shù)據(jù)需要經(jīng)過復(fù)雜的運(yùn)算,從再從遙遠(yuǎn)的多個(gè)數(shù)據(jù)庫中查詢而得到,那么這個(gè)數(shù)據(jù)獲取的代價(jià)是比較昂貴的。
如果這個(gè)數(shù)據(jù)不經(jīng)常變化,而且讀的次數(shù)遠(yuǎn)大于更新的次數(shù),那么就可以把數(shù)據(jù)放到緩存中來,等待下次需要獲取這個(gè)數(shù)據(jù)的時(shí)候,直接從緩存中獲取,避免再次進(jìn)行復(fù)雜計(jì)算和遠(yuǎn)程獲取合并等操作帶來的耗時(shí)。
緩存的基本原理是 通過空間換取時(shí)間。
因?yàn)槭褂镁彺娴扔诎阎付ǖ臄?shù)據(jù)保存在多個(gè)地方,這里涉及到兩份數(shù)據(jù)之間如何做同步。
這里有兩個(gè)方案:
1.緩存產(chǎn)品提供接口來同步,訪問緩存提供的api來操作數(shù)據(jù),這些數(shù)據(jù)會(huì)同時(shí)保存在緩存和數(shù)據(jù)庫中,實(shí)現(xiàn)數(shù)據(jù)的同步,但是目前這樣的產(chǎn)品還是有一定的限制。
2.通過應(yīng)用的邏輯來同步,即手工同步。每次需要更新數(shù)據(jù)的時(shí)候,不僅僅要更新數(shù)據(jù)庫,同時(shí)要更新緩存,這些都由應(yīng)用來操作。
本文的正題:
應(yīng)用應(yīng)該統(tǒng)一規(guī)劃對(duì)數(shù)據(jù)庫的修改,避免在修改了數(shù)據(jù)庫涉及緩存的數(shù)據(jù)時(shí),沒有同步數(shù)據(jù)的修改到緩存。
因?yàn)檎5膽?yīng)用聯(lián)機(jī)邏輯,在使用到緩存的地方一般都會(huì)注意到緩存和數(shù)據(jù)庫數(shù)據(jù)的同步修改。但是由于項(xiàng)目過大,在批量層面往往存在一些操作會(huì)對(duì)緩存涉及的數(shù)據(jù)進(jìn)行修改,而這里的修改往往會(huì)把緩存的同步給忽略,從而導(dǎo)致問題的發(fā)生。
這是筆者在做項(xiàng)目時(shí)的一點(diǎn)經(jīng)驗(yàn),因?yàn)槭褂镁彺娴拇螖?shù)不多,經(jīng)驗(yàn)有限,在于紀(jì)錄下來,省己警人。