了解redis的朋友應該知道它有兩種數據持久化的方式,這里我作一個簡單的介紹,AOF(append only file)和RDB.
1.RDB
這是一種比較常見的方式,采用 寫時復制 的方式,效率高,速度快,介紹一下寫時復制的機制:
當 Redis 需要保存 dump.rdb 文件時, 服務器執行以下操作:
- Redis 調用 fork() ,同時擁有父進程和子進程。
- 子進程將數據集寫入到一個臨時 RDB 文件中。
- 當子進程完成對新 RDB 文件的寫入時,Redis 用新 RDB 文件替換原來的 RDB 文件,並刪除舊的 RDB 文件。
這種工作方式使得 Redis 可以從寫時復制(copy-on-write)機制中獲益。
這種機制使得RDB的速度非常得快,但是存在一些安全性問題,當我的redis服務因為某種原因宕了,當內存新增數據很龐大,子進程需要幾分鍾才能將臨時文件書寫完畢的時候。那么在宕機之后,這幾分鍾的數據很可能就丟失了。所以處於安全性考慮的原因,我會建議使用第二種方式,AOF機制。
2.AOF
aof采用一種fsync的方式進行持久化,相比RDB的方式會相對較慢。但是相對安全,甚至可以說是絕對安全的,取決於具體的配置。他不需要子進程進行協助,他是一種將有關寫的命令append到文件的方式來記錄redis的狀態方式。aof也可以分為三種方式進行append。在此之前先打開appendonly的開關為yes.
appendfsync always (每次向內存中執行寫操作的時候,都執行一次fsync,相當安全,建議數據量不大的時候,又想保證數據安全性的情況下使用)
appendfsync everysec (每秒進行一次fsync,中庸之道)
appendfsync no (不建議使用)
我這里例舉一下redis>2.2的由RDB切換到AOF的方式
[root@localhost redis-2.8.9]# redis-cli 127.0.0.1:6379> config set appendonly yes OK 127.0.0.1:6379> config set save "" OK 127.0.0.1:6379>
redis-cli進入redisShell客戶端,然后開啟aof ,關閉RDB方式。
記得修改 redis.conf里面的配置,不然下次重啟還是使用原來的配置,讀取dump.rdb進行恢復
配置修改如下:
#save "" save "" save 900 1 #save 900 1 save 300 10 ------------------> #save 300 10 save 60 10000 #save 60 10000
appendonly no ---------------------> appendonly yes
備份文件有兩種方式
一.RBD備份方式
1.執行save命令 ,找到dump.rdb(默認放到執行命令(redis-server)的路徑下)
2.執行redis-server redis.conf (如果配置文件選擇的是RDB備份方式)
啟動之后就ok了
二.AOF備份方式
1.找到appendonly.aof(默認放到執行命令(redis-server)的路徑下)
2.執行redis-server redis.conf就可以了(如果配置文件選擇的是AOF備份方式)