14.redis緩存
14.1簡介
穿透型緩存:
- 緩存與后端數據交互在一起,對服務端的調用隱藏細節。如果從緩存中可以讀到數據,就直接返回,如果讀不到,就到數據庫中去讀取,從數據庫中讀到數據,也是先更新緩存,再返回給服務端。向數據庫中寫入數據,也是先寫入緩存中,再同步給數據庫
旁路型緩存:
- 服務先到緩存中讀取數據,如果數據存在,就直接返回
- 如果緩存中沒有數據,就到數據庫中去讀取
- 服務再將從數據庫中讀到的數據同步給緩存
redis是旁路型緩存
14.2 緩存的特征
- 效率高
- 容量小
14.3 redis緩存處理的兩種情況
緩存命中:redis中有相應的數據,直接從redis中讀取,性能很高
緩存缺失:redis中沒有相應的數據,從后端關系型數據庫中讀取數據,性能很低。如果發生緩存缺失,為了后續程序請求中可以從緩存中讀取數據,要將缺失的數據寫入redis,也稱作緩存更新.
String cache_key="user1001";
String cache_value=redis.get(cache_key);//想要從緩存中讀取數據
if (cache_value!=null){
//做相關業務邏輯
}else{cache_value=mysql.getUserById(cache_key);//從關系型數據庫中去讀取數據redis.set(cache_key,cache_value);//緩存更新處理
}
redis不適用于無法獲取源碼的應用。
14.4 緩存的類型
14.4.1 只讀緩存
只用讀取數據的緩存。如果有寫入數據的請求,直接發到后端的mysql或oracle數據庫,在數據庫中完成增刪除改。對于刪除和修改的數據來說,redis中可能會有舊的數據,需要將舊的數據刪除,下一次讀取時,redis緩存缺失,那么就從數據庫中讀數據,并更新到redis緩存中。
緩存圖片、視頻、手機的通訊記錄、銀行的以往帳單。
14.4.2 讀寫緩存
讀定緩存,不只完成對數據讀取任務,數據的增加、刪除、修改操作,也是在redis緩存中完成,由于redis內存數據庫效率很高,所以可以快速響應給服務端調用。
redis內存數據,在redis實例出現問題時,導致數據丟失。
- 同步直寫:優先保證數據可靠
- 異步寫回:執行效率高
對寫請求操作進行高效處理,選擇讀寫緩存
如果寫操作很少,需要提升讀取效率,選擇只讀緩存