裝飾器實現setup
阿新 • • 發佈:2021-01-03
- redis資料持久化
- 持久化就是把記憶體的資料寫到磁碟中,防止服務宕機導致記憶體資料丟失。
- redis持久化機制(rdb預設/aof):
- rds:redis database,快照。按照一定的時間將記憶體中的資料以快照的形式儲存到硬碟中去,對應產生的資料檔案為dump.rdb。
- aof:append only file,將redis執行的每次寫命令記錄到單獨的日誌檔案中,當重啟redis時會重新將持久化日誌中的檔案回覆資料。
- redis key過期策略
定時過期;每個key會建立一個定時器,過期就刪除;但是會佔用大量的cpu資源去處理過期資料;- 惰性過期:訪問一個key的時候,去看這個key是否過期;對記憶體不友好;
- 定期過期:定時掃描一定數量的key,清除過期的key;
- redis記憶體淘汰策略(2000w資料,redis只有20w,怎麼保證redis中都是熱點資料)
- 全域性key的選擇性移除:當記憶體不足以寫入新資料的時候,怎麼淘汰原來的key,redis預設是移除最近最少使用的key
- 設定過期時間的key選擇性移除:記憶體不足時,移除設定過期時間中的最近最少使用的key。
- 支援事務
- redis的事務是具有永續性和一致性;
- 但是不支援隔離性,因為redis的事務是不保證原子性和回滾的,事務中的命令執行失敗,其他命令還是會正常執行的;
- redis的事務支援lua指令碼,指令碼內的資料可以一次性,按順序執行,利用這個可以在redis分散式快取的時候,set命令和expire命令寫在lua指令碼中,實現原子性;
- 支援的資料結構
- string; list; sortedlist; set; hashmap
- 叢集模式(哨兵機制:redis高可用)
- 哨兵機制用來實現redis的高可用:判斷master是否故障,需要哨兵叢集大多數都同意才能判定,那麼會涉及到分散式選舉的問題;哨兵叢集部分節點掛了,還是能正常工作的;哨兵叢集至少需要3個例項(zookeeper也是),只保證高可用,不保證資料0丟失。
- 叢集監控:主從模式上加一層哨兵機制,用來監控slave和master程序是否正常工作;
- 訊息通知:如果redis例項有故障,那麼哨兵會發送訊息報警給管理員;
- 故障轉移:如果master掛掉了,那麼重新選主;
- 配置中心:重新選主,會通知客戶端新的master ip。
- 哨兵機制用來實現redis的高可用:判斷master是否故障,需要哨兵叢集大多數都同意才能判定,那麼會涉及到分散式選舉的問題;哨兵叢集部分節點掛了,還是能正常工作的;哨兵叢集至少需要3個例項(zookeeper也是),只保證高可用,不保證資料0丟失。
- 主從架構
- redis複製的核心機制
- redis採用非同步的方式進行復制;
- slave複製的時候,不會block自己的查詢,此時會用舊的資料集,但是複製完畢後,需要刪除舊資料集,載入新的,此時會關閉對外的讀服務;
- slave節點主要是橫向擴充套件,讀寫分離;
- 如果用了主從複製架構,那麼master必須開啟持久化,因為可能master宕機了,資料是空的,哨兵還沒有檢測到,master又重啟了,然後複製到slave,slave此時也是空的;
- 主從複製原理
- 首次ms關係時,slave會發送全量複製sync給master,然後master會在後臺儲存快照,並將期間收到的寫命令快取到記憶體,然後傳送給slave
- slave收到命令後,會本地持久化到磁碟,然後載入到記憶體中執行;
- 之後master所有的寫命令都會同步給slave
- 但是這樣會給master造成很大的壓力,所有redis實際採用的主從從架構。
- redis複製的核心機制
- redis叢集最大節點數
- 16384 2的14次方
- 快取異常
- 快取穿透
- 快取雪本