redis持久化方式有兩種:RDB方式和AOF方式
1、RDB方式:內存快照,在指定的時間間隔對數據進行快照存儲,支持在客戶端直接BGSAVE或者SAVE命令來創建一個內存快照,BGSAVE會fork一個子進程將快照寫入磁盤,父進程仍可處理其它命令,SAVE則執行過程中不處理其它命令;在redis.conf可以調整save配置選項來設置持久化的觸發策略,當在規定時間內Redis發生了寫操作的個數滿足設定的條件觸發持久化。
2、AOF方式:記錄每次對服務器的寫操作,當服務器重啟時會重新執行這些命令來恢復數據,通過在redis.conf中配置appendonly yes開啟AOF方式 ,通過調整appendsync參數來設置同步的策略
RDB方式優點:對性能影響小、恢復數據快,缺點:會丟失數據、fork子進程會影響提供服務的能力。
AOF方式優點:安全、可容災、可讀 缺點:文件體積大、性能損耗、數據恢復慢
redis內存管理
在redis.conf中通過maxmemory 來配置最大內存,通過maxmemory-policy來配置到達閾值的策略,可選策略如下
其中LRU (最近最少使用) 根據數據的歷史訪問記錄來淘汰數據,LFU(歷史訪問次數),歷史訪問頻率來淘汰數據,具體可參考redis官網。
reids還可以配置內存壓縮 ,通過配置各個數據結構的最大值來對數據進行壓縮,節省空間。
redis數據過期策略
1、主動處理,每秒執行10次,從設置有過期時間的key中隨機找20個,刪除已經過期的,如果有超過25%的過期,則重新再執行一次。
2、被動處理 每次訪問時檢查是否過期,過期則刪除,在數據恢復時候。
數據恢復時過去數據的處理
1、RDB 方式 過期的key不會持久化,載入期間,過期的key會通過主動或者被動被刪除掉
2、AOF方式每次遇到過期的key時會追加一條del命令,恢復時順序執行命令時就會刪除過期的key