redis快取和mysql資料庫同步

2022-03-23 10:46:43 字數 719 閱讀 6327

穿透:頻繁查詢乙個不存在的資料,由於快取不命中,每次都要查詢持久層。從而失去快取的意義。

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

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

雪崩:快取大量失效的時候,引發大量查詢資料庫。

解決辦法:①用鎖/分布式鎖或者佇列序列訪問

②快取失效時間均勻分布

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

解決辦法:

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

②快取過期時間不設定,而是設定在key對應的value裡。如果檢測到存的時間超過過期時間則非同步更新快取。

③在value設定乙個比過期時間t0小的過期時間值t1,當t1過期的時候,延長t1並做更新快取操作。

4設定標籤快取,標籤快取設定過期時間,標籤快取過期後,需非同步地更新實際快取  具體參照userserviceimpl4的處理方式

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

二、非同步kafka在消費端接受資訊後,該怎麼識別處理那張表,呼叫哪個方法,此問題暫時還沒解決

三、比較簡單的redis快取,推薦使用canal

參考文件

redis快取資料

快取資料的步驟 查詢快取,如果沒有資料,則查詢資料庫 查詢資料庫,如果資料不為空,將結果寫入快取 快取資料容易造成如下問題 快取穿透 快取擊穿 快取失效 快取穿透 什麼叫快取穿透?一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 如果key對應的v...

REDIS實現資料快取

注意 使用的map必須是string,string型別的,意味著如果使用map儲存user和userid,userid作為key,物件作為value,那麼物件在進入map之前需要使用fastjson進行object到json的轉換。tips jedis.sadd key value 建立乙個list...

再談快取和Redis

自從上次分享 redis到底該如何利用?已經有1年多了,這1年經歷了不少。從碼了我們 的第一行開始到現在,我們的快取模組也不斷在公升級,這之中確實略有心得,最近也有朋友 快取,覺得可以總結下分享下拙見,期待能有更深入的研究。快取是什麼?我時常在群裡或者在社群裡看到有人對快取有諸多疑問,搞不清快取的用...