redis緩存和mysql數據庫同步

附redis關於緩存雪崩和緩存穿透,熱點key

穿透

穿透:頻繁查詢一個不存在的數據,因爲緩存不命中,每次都要查詢持久層。從而失去緩存的意義。html

解決辦法: 持久層查詢不到就緩存空結果,查詢時先判斷緩存中是否exists(key) ,若是有直接返回空,沒有則查詢後返回,redis

                  注意insert時需清除查詢的key,不然即使DB中有值也查詢不到(固然也能夠設置空緩存的過時時間)數據庫

雪崩

雪崩:緩存大量失效的時候,引起大量查詢數據庫。
解決辦法:①用鎖/分佈式鎖或者隊列串行訪問緩存

                  ②緩存失效時間均勻分佈異步

熱點key

熱點key:某個key訪問很是頻繁,當key失效的時候有打量線程來構建緩存,致使負載增長,系統崩潰。分佈式

解決辦法:ide

①使用鎖,單機用synchronized,lock等,分佈式用分佈式鎖。spa

②緩存過時時間不設置,而是設置在key對應的value裏。若是檢測到存的時間超過過時時間則異步更新緩存。.net

③在value設置一個比過時時間t0小的過時時間值t1,當t1過時的時候,延長t1並作更新緩存操做。線程

4設置標籤緩存,標籤緩存設置過時時間,標籤緩存過時後,需異步地更新實際緩存  具體參照userServiceImpl4的處理方式

 

總結

1、查詢redis緩存時,通常查詢若是以非id方式查詢,建議先由條件查詢到id,再由id查詢pojo

2、異步kafka在消費端接受信息後,該怎麼識別處理那張表,調用哪一個方法,此問題暫時還沒解決

3、比較簡單的redis緩存,推薦使用canal

參考文檔

http://blog.csdn.net/fly_time2012/article/details/50751316

http://blog.csdn.net/kkgbn/article/details/60576477

http://www.cnblogs.com/fidelQuan/p/4543387.html

相關文章
相關標籤/搜索