Redis提供了高性能的數據存取功能,因此普遍應用在緩存場景中,既能有效地提高業務應用的響應速度,還能夠避免把高併發壓力發送到數據庫層。前端
由於Redis用做緩存的廣泛性以及它在業務應用中的重要做用,因此須要系統地掌握緩存的一系列內容,包括工做原理、替換策略、異常處理和擴展機制。redis
今天咱們瞭解緩存的特徵和Redis緩存的工做機制。數據庫
主要有兩個特徵:後端
一是在一個層次化的系統中,緩存必定是一個快速子系統,數據存在緩存中時,能避免每次從慢速子系統中存取數據。緩存
二是緩存系統的容量大小老是小於後端慢速系統的,咱們不可能把全部數據都放在緩存系統中。併發
把Redis用做緩存時,會把Redis部署在數據庫的前端,業務應用在訪問數據時,會先查詢Redis中是否保存了相應的數據。此時,根據數據是否存在緩存中,會有兩種狀況:異步
由於Redis是獨立的系統軟件,和業務應用程序是兩個軟件,所以使用Redis緩存時,要在應用程序中增長三方面代碼:高併發
下面是一段示例代碼:性能
String cacheKey = 「productid_11010003」; String cacheValue = redisCache.get(cacheKey); //緩存命中 if ( cacheValue != NULL) return cacheValue; //緩存缺失 else cacheValue = getProductFromDB(); redisCache.put(cacheValue) //緩存更新
按照Redis緩存是否接受寫請求,能夠分爲只讀緩存和讀寫緩存。spa
只讀緩存指讀請求會先通過Redis,寫操做不會通過Redis,可是會刪除相應的數據。當再次讀取數據時,會發生緩存缺失,而後從數據庫中讀取並寫入緩存。
讀寫緩存指除了讀請求會發到緩存處理,寫請求也會發到緩存處理。
和只讀緩存不同的是,在使用讀寫緩存時,最新的數據是在Redis中,而Redis是內存數據庫,一旦出現掉電或宕機,內存中的數據就會丟失。
因此,根據業務應用對數據可靠性和緩存性能的不一樣要求,會有兩種策略,分別是同步直寫和異步寫回。
使用只讀緩存時,是先把修改寫到後端數據中,再把緩存中的數據刪除。下次訪問時,再從後端數據庫讀取。
使用讀寫緩存時,是同時修改數據庫和緩存中的值。
當數據庫或緩存修改失敗時:
總結一下:只讀緩存犧牲必定性能,優先保證數據庫和緩存的一致性,更適合對於一致性要求比較高的業務場景。對於數據庫和緩存一致性要求不高,或者不存在併發修改同一個值的狀況,使用讀寫緩存比較合適,保證更好的性能。