1. 程式人生 > 實用技巧 >裝飾器實現setup

裝飾器實現setup

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