redis多被用於緩存和消息中間件,當被用做緩存時,數據的讀寫都是在內存中進行的,而內存一旦在主機斷電或者主機重啓時裏面的數據將被清空,爲保證數據不被丟失,redis爲咱們提供兩種數據持久化存儲方式:RDB,AOF。redis
RDB持久化是按配置文件中指定的時間間隔,每隔一段時間將當前進程生成數據保存到硬盤名爲xx.rdb的二進制文件中。咱們也能夠手動使用save或者bgsave命令,將新生成的數據手動保存到硬盤的xx.rdb二進制文件中。數據庫
save命令:使用save命令要注意,它會阻塞當前redis服務器,直到RDB將數據所有保存到xx.rdb文件中爲止,若是是線上環境不建議使用該命令。vim
使用save命令RDB存儲過程以下:緩存
bgsave命令:redis進程會建立一個子進程,RDB的存儲過程是由子進程來負責完成的,完成後自動退出子進程,阻塞只發生在建立子進程這個階段,所以時間很短,不會影響主進程。服務器
使用save命令RDB存儲過程以下:app
AOF(append only file 僅追加模式):它是以寫日誌的方式,將每次寫命令追加到xx.aof文件中,當設備斷電或重啓時,redis server會執行xx.aof文件中記錄的命令,經過此種方式實現恢復數據的目的。async
AOF持久化存儲過程以下:性能
一、全部寫入命令會追加到aof_buf的緩衝區中。
二、AOF根據配置文件中的策略向硬盤的xx.aof文件中追加命令。spa
對比RDB和AOF操作系統
一、RDB是以二進制的方式將數據保存到文件中,AOF是以文本的形式將數據保存在文件中,所以AOF生成的文件會比RDB生成的文件要大的多。
二、RDB是redis server經過子進程來執行持久化存儲的,而且RDB是以全量的方式進行保存,所以執行RDB的時間間隔不宜太頻繁,不然會影響性能,這樣便存在一個空檔期,當在這個空檔期發生斷電或者系統重啓時會出現丟失數據的狀況。AOF當有寫入時,將寫入的命令記錄到xx.aof文件中,所以它能更好的保證數據不丟失。
三、數據恢復:RDB的方式redis server直接讀取xx.rdb文件到內存中,AOF的方式redis server讀取xx.aof文件,經過執行文件中的命令的方式來實現數據恢復,所以它的數據恢復速度相比於RDB的方式要慢。
因爲是演示,這裏的配置文件也就進行了簡單設置,個人配置文件內容以下:
# 安裝redis [root@zabbix-server ~]# wget -P /opt/source/ http://download.redis.io/releases/redis-5.0.4.tar.gz [root@zabbix-server ~]# tar -zxvf /opt/source/redis-5.0.4.tar.gz -C /opt/ [root@zabbix-server ~]# cd /opt/redis-5.0.4/ [root@zabbix-server redis-5.0.4]# make && make install //默認在/usr/local/bin因此就不用咱們設置環境變量了 # 建立工做目錄 [root@zabbix-server ~]# mkdir /opt/redis-5.0.4/redis_config/ # 存放配置文件的目錄 [root@zabbix-server ~]# mkdir /opt/redis-5.0.4/data/ # 日誌,RDB,AOF等數據的存儲目錄 # 自定義配置文件 [root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/rdb_config.conf bind 192.168.10.100 # 本機地址 port 9000 # 綁定端口 daemonize yes # 後臺運行 dir /opt/redis-5.0.4/data/ # redis數據存放的目錄 dbfilename rdb_data.rdb # RDB文件的名字 # 格式是:save <seconds> <changes> ,含義是在 seconds 秒以後至少有 changes個keys 發生改變則保存一次 save 900 1 # 900秒後若是有一個KEY發生了變化觸發RDB save 300 10 save 60 10000
驗證配置
運行redis服務
[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/rdb_config.conf
若是服務運行成功你會看到以下:
登陸redis數據庫,並寫入數據。
[root@zabbix-server ~]# redis-cli -h 192.168.10.100 -p 9000 # 登陸redis 192.168.10.100:9000> ping # 檢測鏈接 PONG 192.168.10.100:9000> set name XiaoMing # 向數據庫中添加數據 OK 192.168.10.100:9000> set age 12 OK 192.168.10.100:9000> keys * # 查看添加後的數據 1) "age" 2) "name" 192.168.10.100:9000> get name "XiaoMing" 192.168.10.100:9000> get age "12" 192.168.10.100:9000> save # 手動觸發RDB OK 192.168.10.100:9000>
使用kill結束redis server
[root@zabbix-server ~]# kill -9 redis server的PID
若是執行成功你會看到以下:
驗證 一: 到/opt/redis-5.0.4/data/目錄下查看是否生成了rdb_data.rdb 文件
驗證 二:從新運行redis server服務,驗證數據是否丟失
到此RDB持久化存儲就簡單介紹到這裏,關於RDB持久化存儲須要注意的就是配置文件中的save那個選項。
[root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/rdb_config.conf bind 192.168.10.100 # 本機地址 port 9000 # 綁定端口 daemonize yes # 後臺運行 dir /opt/redis-5.0.4/data/ # redis數據存放的目錄 dbfilename rdb_data.rdb # RDB文件的名字 # 格式是:save <seconds> <changes> ,含義是在 seconds 秒以後至少有 changes個keys 發生改變則保存一次,這個是redis默認給的值,咱們能夠根據具體實際狀況自行調整 save 900 1 # 900秒後若是有一個KEY發生了變化觸發RDB save 300 10 save 60 10000
個人配置文件內如以下:
[root@zabbix-server ~]# vim /opt/redis-5.0.4/redis_config/aof_config.conf bind 192.168.10.100 # 綁定IP地址 port 9001 # 綁定端口 daemonize yes dir /opt/redis-5.0.4/data/ # redis 的工做目錄 appendfilename aof_data.aof # AOF文件的名字 appendonly yes # 啓用AOF持久化存儲 appendfsync everysec # 可選值always、everysec和no # 設置爲always時,每次收到命令寫入時,都會調用fsync(Linux爲調用fdatasync)強制將數據寫入到硬盤的xx.aof文件中, # 此時會出現阻塞直到數據被徹底同步到硬盤的xx.aof中,該模式下能夠很好的保證數據不被丟失,但會嚴重影響redis服務器的性能,不多用。 # 設置爲everysec時,每次收到命令寫入時,先調用系統write將數據寫入到系統緩衝區中,由單獨的線程每秒調用一次fsync(Linux爲調用fdatasync)將數據同步到xx.aof文件中, # 若是系統在線程尚未調用fsync時會出現數據丟失,推薦使用該模式,該模式是在性能和存儲上選用折中的方式,推薦使用。 # 設置爲no時,每次收到命令寫入時,先調用系統write將數據寫入到系統緩衝區中,後由操做系統負責將緩衝區中的數據寫入到xx.aof文件中, # 這個週期是在30秒之內,該模式是性能最好,可是不能很好的保證數據不被丟失,不推薦使用。 # AOF是向xx.aof文件追加寫命令,所以文件會愈來愈大,而且有可能會有重複的命令,所以須要對xx.aof文件進行重寫去掉重複的命令,來減少文件的體積。 auto-aof-rewrite-min-size 64mb # AOF文件初始最小值 auto-aof-rewrite-percentage 100 # 當前AOF文件大小是上一次重寫後的AOF文件大小的2倍後,進行重寫
啓動redis 服務
[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/aof_config.conf
登陸redis寫入數據
[root@zabbix-server ~]# redis-cli -h 192.168.10.100 -p 9001 # 登陸redis 192.168.10.100:9001> ping # 查看連接狀態 PONG 192.168.10.100:9001> keys * # 查看數據庫中的鍵 (empty list or set) 192.168.10.100:9001> set test HelloWorld # 添加數據 OK 192.168.10.100:9001> set damo HaHaHa OK 192.168.10.100:9001> keys * # 查看添加後的數據 1) "test" 2) "damo" 192.168.10.100:9001> get test "HelloWorld" 192.168.10.100:9001> get damo "HaHaHa" 192.168.10.100:9001>
結束redis服務
[root@zabbix-server ~]# kill -9 AOF的進程PID # 殺掉AOF的redis服務
執行完成後你會看到以下:
驗證 一:在/opt/redis-5.0.4/data/下查看是否存在aof_data.aof
驗證 二:登陸數據庫查看數據是否丟失
啓動redis服務
[root@zabbix-server ~]# redis-server /opt/redis-5.0.4/redis_config/aof_config.conf
登陸數據庫查看結果
到此redis持久化存儲就簡單介紹到這裏,關於AOF還有不少配置選項這裏就不一一列舉了,感興趣的朋友能夠查看配置文件根據具體狀況瞭解更多內容。