redis 讀書筆記_1
阿新 • • 發佈:2020-11-27
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出現問題,不去資料庫查詢,而是直接返回預設值給使用者