1. 程式人生 > 資料庫 >redis 讀書筆記_1

redis 讀書筆記_1

Remote Dictionary Service

套接字socket:對網路中不同主機上的應用程序之間進行雙向通訊的端點的抽象

持久化:

  1.作用:防止資料丟失

  2.機制:

              RDB儲存(快照--硬碟):全量備份,二進位制序列化形式

                 fork產生子程序處理快照持久化(共享記憶體中的程式碼段和資料段),子程序不會改變現有的記憶體資料結構,對資料結構進行遍歷讀取,序列化到磁碟的臨時檔案中,寫完後會替代舊檔案。

              AOF日誌(append only file):連續增量備份,記憶體資料修改的指令記錄文字

                 接收修改指令,行引數校驗儲存磁碟AOF日誌中,執行指令

 AOF開啟後AOF優先順序高


快取問題:雪崩,穿透,預熱,更新,降級

1.快取雪崩:原有快取失效,新快取未到期間;在同一時刻 設定的快取大面積過期,從而訪問資料庫,對資料庫和記憶體造成壓力,可能會導致資料庫宕機。

  解決:

  • 加鎖排隊,避免大量併發請求
  • 快取失效時間分散

2.快取穿透:快取沒有資料,查詢資料庫沒有資料;每次查詢都執行了兩次無用查詢(快取命中率問題)

   解決:

  • 布隆過濾器
  • 儲存空資料(儲存時間短)

3.快取預熱:使用者使用系統時,資料載入到快取系統中的第一次處理

處理方法:

  • 上線時,手工操作,重新整理
  • 資料量不大,可在專案啟動時自動進行載入

4.快取更新:快取失效策略

key過期

  • 定時過期:每個設定過期時間的key都需要建立一個定時器,到過期時間就會立即清除。該策略可以立即清除過期的資料,對記憶體很友好;但是會佔用大量的CPU資源去處理過期的資料,影響效能。
  • 惰性過期:訪問key是判斷是否過期,過期則刪除。當大量的過期key沒有被訪問到,會造成記憶體溢位。
  • 定期過期:每隔一定的時間,會掃描一定數量的資料庫的expires字典中一定數量的key,並清除其中已過期的key。該策略是前兩者的一個折中方案。通過調整定時掃描的時間間隔和每次掃描的限定耗時,可以在不同情況下使得CPU和記憶體資源達到最優的平衡效果。
    (expires字典會儲存所有設定了過期時間的key的過期時間資料,其中,key是指向鍵空間中的某個鍵的指標,value是該鍵的毫秒精度的UNIX時間戳表示的過期時間。鍵空間是指該Redis叢集中儲存的所有鍵。)

5.快取降級:保證核心服務可用

服務降級的目的,是為了防止Redis服務故障,導致資料庫跟著一起發生雪崩問題。因此,對於不重要的快取資料,可以採取服務降級策略,例如一個比較常見的做法就是,Redis出現問題,不去資料庫查詢,而是直接返回預設值給使用者