redis緩存和mysql數據庫同步


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

穿透

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

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

                  注意insert時需清除查詢的key,否則即便DB中有值也查詢不到(當然也可以設置空緩存的過期時間)

雪崩

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

                  ②緩存失效時間均勻分布

熱點key

熱點key:某個key訪問非常頻繁,當key失效的時候有打量線程來構建緩存,導致負載增加,系統崩潰。

解決辦法:

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

②緩存過期時間不設置,而是設置在key對應的value里。如果檢測到存的時間超過過期時間則異步更新緩存。

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

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

 

總結

一、查詢redis緩存時,一般查詢如果以非id方式查詢,建議先由條件查詢到id,再由id查詢pojo

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

三、比較簡單的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM