1. 程式人生 > 實用技巧 >redis持久化配置

redis持久化配置

Redis由於支援非常豐富的記憶體資料結構型別,如何把這些複雜的記憶體組織方式持久化到磁碟上是一個難題,所以Redis的持久化方式與傳統資料庫的方式有比較多的差別,Redis一共支援四種持久化方式,分別是:

  • RDB定時快照方式(snapshot):RDB 將資料庫的快照(snapshot)以二進位制的方式儲存到磁碟中。
  • AOF基於語句追加檔案的方式:則以協議文字的方式,將所有對資料庫進行過寫入的命令(及其引數)記錄到 AOF 檔案,以此達到記錄資料庫狀態的目的。
  • 虛擬記憶體(vm) (被廢棄)
  • Diskstore方式 (被廢棄)

1、RDB預設開啟:

[root@redis-master src]# cd ..
[root@redis
-master redis]# vim redis.conf #dbfilename:持久化資料儲存在本地的檔案 dbfilename dump.rdb #dir:持久化資料儲存在本地的路徑 dir /data/application/redis/data ##snapshot觸發的時機,save <seconds> <changes> ##如下為900秒後,至少有一個變更操作,才會snapshot ##對於此值的設定,需要謹慎,評估系統的變更操作密集程度 ##可以通過save “”來關閉snapshot功能 #save時間,以下分別表示更改了1個key時間隔900s進行持久化儲存;更改了10個key300s進行儲存;更改10000個key60s進行儲存。 save
900 1 save 300 10 save 60 10000 ##yes代表當使用bgsave命令持久化出錯時候停止寫RDB快照檔案,no表明忽略錯誤繼續寫檔案,“錯誤”可能因為磁碟已滿/磁碟故障/OS級別異常等 stop-writes-on-bgsave-error yes ##是否啟用rdb檔案壓縮,預設為“yes”,壓縮往往意味著“額外的cpu消耗”,同時也意味著較短的網路傳輸時間 rdbcompression yes 注意:每次快照持久化都是將記憶體資料完整寫入到磁碟一次,如果資料量大的話,而且寫操作比較多,必然會引起大量的磁碟io操作,可能會嚴重影響效能。

2、AOF預設關閉

開啟方法:

[root@redis-master redis]# vim redis.conf
修改如下:
1、此選項為aof功能的開關,預設為“no”,可以通過“yes”來開啟aof功能,只有在“yes”下,aof重寫/檔案同步等特性才會生效
====================================
2、指定aof檔名稱
appendfilename appendonly.aof  
====================================
3、指定aof操作中檔案同步策略,有三個合法值:always everysec no,預設為everysec
appendfsync everysec  
always     #每次有資料修改發生時都會寫入AOF檔案。
everysec  #每秒鐘同步一次,該策略為AOF的預設策略
no          #從不同步。高效但是資料不會被持久化

開啟持久化功能後,重啟redis後,資料會自動通過持久化檔案恢復

3、拓展RDB快照備份恢復:

redis資料庫備份與恢復(dump.rdb快照方式),兩臺機器

做備份的redis

做備份機器的redis.conf配置檔案內容:
dbfilename dump.rdb
dir /data/application/redis/data
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
備份資料:
[root@redis-slave-1 redis]# src/redis-cli 
127.0.0.1:6379> set name3 xiaobi
OK
127.0.0.1:6379> set name4 xiaotao
OK
127.0.0.1:6379> BGSAVE   執行備份,或者敲SAVE
[root@redis-slave-1 redis]# ls data/
dump.rdb

[root@redis-slave-1 redis]# scp data/dump.rdb 192.168.62.135:/usr/local/redis/data/

恢復資料的redis

修改redis.conf配置檔案

將dump.rdb資料檔案存放到配置檔案制定的目錄下,直接啟動即可
[root@redis-master redis]# src/redis-server redis.conf &
[root@redis-master redis]# src/redis-cli
[root@redis-master redis]#
127.0.0.1:6379> get name3
"xiaobi"
127.0.0.1:6379> get name4
"xiaotao"