寫在前面
深入業(yè)務(wù),才能有好的設(shè)計准脂。在設(shè)計緩存的時候劫扒,要根據(jù)我們的業(yè)務(wù)特點,明白什么是不容易變的狸膏,什么是相對容易變粟关,什么是真正觸達用戶的,哪些數(shù)據(jù)是關(guān)鍵。這樣才能發(fā)現(xiàn)真正應(yīng)該cache的點闷板。
什么時候用緩存
緩存訪問頻率高澎灸、變化頻率低的數(shù)據(jù)
使用原則:在一致性要求不高(高一致性例如交易的賬戶)的情景下,數(shù)據(jù)層讀服務(wù)必須加緩存
數(shù)據(jù)服務(wù):直接跟DB交互的讀服務(wù)需要根據(jù)數(shù)據(jù)一致性要求(強弱分辨)加緩存
業(yè)務(wù)服務(wù):調(diào)用大量的外部讀服務(wù)拼裝結(jié)果的需要加緩存
緩存數(shù)據(jù)要盡可能的貼近用戶端遮晚,盡量高的從各類緩存中命中數(shù)據(jù)性昭,而不是訪問數(shù)據(jù)庫
何時不用緩存
對數(shù)據(jù)要求苛刻,變化頻率高县遣、訪問頻率低的數(shù)據(jù)不能緩存
緩存使用實現(xiàn)
- 本地緩存:可用hashmap(注意并發(fā))糜颠、guava-cache(推薦)等。對于一致性要求不高且緩存命中率較高的數(shù)據(jù)服務(wù)萧求,本地緩存可以減少服務(wù)端調(diào)用次數(shù)其兴;
- 集中緩存:又稱分布式緩存,實現(xiàn)由redis(推薦)夸政、memcache等元旬。建議作為緩存使用,而不是存儲守问。在數(shù)據(jù)變化頻率很高的情況下匀归,可作為DB的寫入緩存
緩存的使用順序
內(nèi)存緩存>分布式緩存>數(shù)據(jù)庫
緩存的設(shè)計原則
- 靜態(tài)化:數(shù)據(jù)盡量以目標展現(xiàn)的格式存儲,而不是存儲中間數(shù)據(jù)耗帕。減少數(shù)據(jù)格式化的時間消耗穆端,用空間換時間。
- 專用化:數(shù)據(jù)靜態(tài)化后仿便,可使用的范圍有限体啰,應(yīng)盡量貼近用戶的結(jié)構(gòu),降低使用后的格式化成本嗽仪。
- 隔離化:封裝緩存數(shù)據(jù)的訪問荒勇,把緩存的控制權(quán)掌握在自己手中。
緩存同步模式
- 增量同步:按照時間戳或者數(shù)據(jù)變化更新緩存钦幔。
- 全量同步:重新拉取所有的緩存數(shù)據(jù)。不建議采用此種模式常柄,性能差鲤氢,同步的數(shù)據(jù)量大。
緩存同步時機
- 每次查詢時同步:在做查詢時西潘,檢驗數(shù)據(jù)的版本卷玉,然后進行緩存同步。
- 增刪改時失效:在做數(shù)據(jù)的增刪改時喷市,同步修改緩存相种。
- 定時同步:在緩存的駐留端定時更新緩存。此種模式適用于對數(shù)據(jù)的實時性要求不高的場景品姓。
緩存時效性
- 有時效性:緩存數(shù)據(jù)存在時效性寝并,不管數(shù)據(jù)的版本有沒有變化箫措,過期失效。
- 無時效性:只要數(shù)據(jù)的時間戳保持不變衬潦,緩存數(shù)據(jù)永久有效斤蔓。
緩存使用原則
- 越少的緩存使用,越有價值镀岛。
- 離最終的計算結(jié)果越近弦牡,越有價值。
- 對于需要消耗I/O資源的緩存漂羊,要盡可能的減少調(diào)用的次數(shù)驾锰。
反復(fù)緩存所導(dǎo)致性能惡化的原因是無節(jié)制地使用緩存。緩存使用的指導(dǎo)原則是:工程師們在使用緩存時必須全局考慮走越,精細規(guī)劃椭豫,確保數(shù)據(jù)完全緩存的情況下,系統(tǒng)仍然不會頻繁full GC买喧。為了確保這一點捻悯,對于存在多種類型緩存以及系統(tǒng)流量變化很大的系統(tǒng),設(shè)計者必須嚴格控制緩存大小淤毛,甚至廢除緩存(這是典型為了提高流量高峰時可用性今缚,而降低平均響應(yīng)時間的一個例子)。反復(fù)緩存反模式往往發(fā)生在流量高峰時候低淡,通過線性增加機器和提高機器內(nèi)存可以大大減少系統(tǒng)崩潰的概率姓言。
緩存使用注意事項
- 緩存對象大小限制
- 高頻和低頻分離
- 緩存過期時間設(shè)置
- 防止緩存擊穿雪崩ask
- 服務(wù)過載的cache應(yīng)對策略
- 緩存自動加載技法 guava-cache的loading模式可以參考
- 禁用堆外內(nèi)存
- null值得緩存
- 分布式換成考慮序列化和反序列化成本 & key的分布情況,不要分散到過多的節(jié)點
緩存的評審
- 在系統(tǒng)設(shè)計階段對緩存使用進行評審
- 在code-review階段進行緩存review