Redis第三講
一、Redis存儲五種類型的常用命令(暫略)
二、持久化( 瞭解)
Redis 的高性能是由於其將所有數據都存儲在了內存中,爲了使 Redis 在重啓之後仍能保證數據不丟失,需要將數據從內存中同步到硬盤中,這一過程就是持久化。
Redis 支持兩種方式的持久化,一種是 RDB 方式,一種是 AOF 方式。可以單獨使用其中一種或將二者結合使用。
RDB 持久化
RDB 方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時 Redis 會自動將內存中的數據進行快照並持久化到硬盤。
RDB 是 Redis 默認採用的持久化方式,在 redis.conf(Windows 下是 redis.windows.conf)配置文件中默認有此下配置:
save 開頭的一行就是持久化配置,可以配置多個條件(每行配置一個條件),每個條件之間是“或”的關係,“save 900 1”表示 15 分鐘(900 秒鐘)內至少 1 個鍵被更改則進行快照,“save 300 10”表示 5 分鐘(300 秒)內至少 10 個鍵被更改則進行快照。
在 redis.conf 中:
配置 dir 指定 rdb 快照文件的位置
配置 dbfilenam 指定 rdb 快照文件的名稱
Redis 啓動後會讀取 RDB 快照文件,將數據從硬盤載入到內存。根據數據量大小與結構和服務器性能不同,這個時間也不同。通常將記錄一千萬個字符串類型鍵、大小爲 1GB 的快照文件載入到內存中需要花費 20~30 秒鐘。
使用建議:
通過 RDB 方式實現持久化,一旦 Redis 異常退出,就會丟失最後一次快照以後更改的所有數據。這就需要開發者根據具體的應用場合,通過組合設置自動快照條件的方式來將可能發生的數據損失控制在能夠接受的範圍。如果數據很重要以至於無法承受任何損失,則可以考慮使用 AOF 方式進行持久化。
AOF 持久化
默認情況下 Redis 沒有開啓 AOF(append only file)方式的持久化,可以通過 appendonly參數並指定爲 yes 開啓:
開啓 AOF 持久化後每執行一條會更改 Redis 中的數據的命令,Redis 就會將該命令寫入硬盤中的 AOF 文件。AOF 文件的保存位置和 RDB 文件的位置相同,都是通過 dir 參數設置的,默認的文件名是 appendonly.aof,可以通過 appendfilename 參數修改:appendfilename appendonly.aof
同步策略
appendfsync no
當設置 appendfsync 爲 no 的時候,Redis 不會主動調用 fsync 去將 AOF 日誌內容同步到磁盤,所以這一切就完全依賴於操作系統的調試了。對大多數 Linux 操作系統,是每 30 秒進行一次 fsync,將緩衝區中的數據寫到磁盤上。
appendfsync everysec
當設置 appendfsync 爲 everysec 的時候,Redis 會默認每隔一秒進行一次 fsync 調用,將緩衝區中的數據寫到磁盤。但是當這一次的 fsync 調用時長超過 1 秒時。Redis 會採取延遲fsync 的策略,再等一秒鐘。也就是在兩秒後再進行 fsync,這一次的 fsync 就不管會執行多長時間都會進行。這時候由於在 fsync 時文件描述符會被阻塞,所以當前的寫操作就會阻塞。
appendfsync always
當設置 appendfsync 爲 always 時,每一次寫操作都會調用一次 fsync,這是數據是最安全的,當然,由於每次都會執行 fsync,所以其性能也會受到影響。
二者比較