Redis 的持久化

rdb方式

rdb是redis對數據進行持久化而保存到硬盤的數據文件。redis

默認狀況下相關配置以下:緩存

save 900 1
save 300 10
save 60 10000

其意義爲:安全

  • 當1個key更新值時每900秒保存一次數據到硬盤服務器

  • 當10個key更新值時每300秒保存一次到硬盤app

  • 當10000個key更新值時每60秒保存一次到硬盤異步

換句話說,當你重啓服務器時數據是可能會丟失的,若是數據量小的時候,你會丟失5分鐘之內的數據;若是數據量大的時候,你會丟失一分鐘之內的數據。操作系統

因此set name 1後重啓服務器,get name時的結果會是nil,若是你想避免這種狀況發生,那麼能夠save後重啓服務器。日誌

然而大多數狀況下咱們須要防止的是服務器突發狀況下的重啓,這時候可能沒有機會save,因此仍是會形成數據的丟失。因此你能夠設置save "",這樣的話會每次寫操做到保存到硬盤,可是redis做爲緩存卻須要每次到保存到硬盤已喪失了其做爲緩存的意義。所以這種方法是不可取的。code

還有一種方式,在每次寫操做時使用bgsave命令,能夠直接返回操做結果並異步將其保存到硬盤。get

rdb方式的優勢是保存的數據存儲量小(只有數據),重啓速度很快;缺點是可能會形成數據的丟失。

aof方式

aof本質是redis操做(寫操做)日誌文件。aof默認是未開啓的,須要在配置文件中進行設置,在配置文件中將這一行改成appendonly yes就能夠了。

那麼會在何時append到文件末尾呢?有三種方式:

appendfsync always
appendfsync everysec
appendfsync no
  • appendfsync always每次有新命令追加到 AOF 文件時就執行一次 fsync :很是慢,也很是安全

  • appendfsync everysec每秒 fsync 一次:足夠快(和使用 RDB 持久化差很少),而且在故障時只會丟失 1 秒鐘的數據。

  • appendfsync no從不 fsync :將數據交給操做系統來處理。更快,也更不安全的選擇。

推薦(而且也是默認)的措施爲每秒 fsync 一次, 這種 fsync 策略能夠兼顧速度和安全性。

aof可以保證數據的安全,可是在重啓時比較耗時,並且aof文件的體積比rdb文件大。

使用

在同時開啓rdb和aof模式時,會採用aof模式來讀取數據。在正常的使用中,若是不是十分在意短期內的數據丟失的時候,使用rdb方式會使服務器的效率更高,更節省cpu和硬盤;若是擔憂數據丟失的話,aof方式無疑會是更好的選擇。

相關文章
相關標籤/搜索