redis持久化存盤
Redis是一種記憶體型資料庫,一旦服務器行程退出,資料庫的資料就會丟失,為了解決這個問題,Redis提供了兩種持久化的方案,將記憶體中的資料保存到磁盤中,避免資料的丟失,
1.RDB持久化
-
redis提供了RDB持久化的功能,這個功能可以將redis在記憶體中的狀態資料保存到磁盤
-
觸發機制:
- 手動執行save命令
- 或者配置觸發條件
-
組態檔:s21_rdb.conf
- 配置核心引數:
- dbfilename s21redis.rdb
- save 900 1
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定義持久化檔案存盤位置/data/6379 dbfilename s21redis.rdb #rdb持久化檔案s21redis.rdb bind 127.0.0.1 #redis系結地址 #save 900 1 # #save 200 10 #在200秒中內,超過10個修改類的操作 save 20 2 #- 創建檔案夾 data/6379
[root@xujunk s21redis]#mkdir -p /data/6379/- 開啟redis-server
[root@xujunk s21redis]#redis-server s21_rdb.conf 查看啟動狀態: [root@xujunk s21redis]#ps -ef |grep redis """ root 22057 1 0 17:14 ? 00:00:00 redis-server 127.0.0.1:6379 """- 啟動redis-cli端,并進行操作
[root@xujunk redis-4.0.10]#redis-cli #咱們設定save 為20秒內 操作2次,所以這里最少操作2次 [root@xujunk redis-4.0.10]#set name haha [root@xujunk redis-4.0.10]#set name2 haha- 查看存盤為位置:
[root@xujunk s21redis]#ls /data/6379 redis.log s21redis.rdb #此時生成2個檔案,- 殺死所有redis
pkill -9 redis- 再次進入redis
[root@xujunk s21redis]#redis-server s21_rdb.conf [root@xujunk s21redis]#redis-cli 127.0.0.1:6379> keys * 1) "name2" 2) "name3" #此時資料達到持久化存盤 - 配置核心引數:
2.第二個機制:AOF機制
-
AOF機制,將你的修改類操作命令,追加到日志檔案中
- 記錄服務器執行的所有變更操作命令(例如set del等),并在服務器啟動時,通過重新執行這些命令來還原資料集
-
AOF 檔案中的命令全部以redis協議的格式保存,新命令追加到檔案末尾,追加檔案方式,
- 優點:最大程式保證資料不丟,RDB在沒有觸發save機制之前就宕機了,那么資料就沒了,
- 缺點:日志記錄非常大
-
追加檔案:用在檔案末尾追加記錄的方式,對Redis寫入的資料,依次進行持久化,所以它的持久化是更加安全的,
-
此外,它還提供一個用appendfsync選項設定fsync的策略,確保寫入的資料都落到磁盤中,具體選項包括always,everysec,no等,
-
修改aof 組態檔添加如下引數 ,核心功能引數是:
appendonly yes appendfsync always 總是修改類的操作 everysec 每秒做一次持久化 no 依賴于系統自帶的快取大小機制 -
AOF存盤示例
-
創建組態檔并且編輯配置:
[root@xujunk s21redis]#touch s21_aof.conf [root@xujunk s21redis]#vim s21_aof.conf daemonize yes port 6379 dir /data/6379 appendonly yes appendfsync everysec logfile /data/6379/redis.log -
以自己組態檔 啟動redis
[root@xujunk 6379]#redis-server /opt/s21redis/s21_aof.conf [root@xujunk 6379]#ls appendonly.aof redis.log #此時6379目錄生成2個檔案,實時存盤 #實時監控存盤資料檔案 [root@xujunk 6379]#tail -f appendonly.aof #另起一個視窗啟動客戶端,操作redis [root@xujunk s21redis]#redis-cli 127.0.0.1:6379> set name "www" OK #監控客戶端實時輸出存入結果: *2 $6 SELECT $1 0 *3 $3 set $4 name $3 www
-
-
redis 持久化方式有哪些?有什么區別?
rdb:基于快照的持久化,速度更快,一般用作備份,主從復制也是依賴于rdb持久化功能 aof:以追加的方式記錄redis操作日志的檔案,可以最大程度的保證redis資料安全,類似于mysql的binlog
3.redis持久化rdb切換aof備份
-
本文在redis4.0中,通過config set命令,達到不重啟redis服務,從RDB持久化切換為AOF
-
查看redis版本
[root@xujunk s21redis]#redis-server -v Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=f4e8cdb9b08f1cb0 -
rdb模式下的redis持久化,不重啟切換為 aof模式
-
手動操作:
redis內切換: config set appendonly yes config set save "" -
環境準備:更改s21_rdb.conf配置
#準備rdb組態檔 daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定義持久化檔案存盤位置/data/6379 #dbfilename s21redis.rdb #rdb持久化檔案s21redis.rdb bind 127.0.0.1 #redis系結地址 #save 900 1 # #save 200 10 #在200秒中內,超過10個修改類的操作 save 20 2 appendonly yes appendfsync always -
洗掉rdb保存檔案
[root@xujunk 6379]#rm -rf dump.rdb -
重啟redis server端部
[root@xujunk 6379]#redis-server /opt/s21redis/s21_rdb.conf -
啟動客戶端
[root@xujunk 6379]#redis-cli 127.0.0.1:6379> keys * 1) "name" #在沒有重啟redis-server端實作RDB---->AOF(切換) -
詳情看博客:https://www.cnblogs.com/pyyu/p/10061526.html
-
注意想要永久切換為aof,還得修改組態檔方可
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/40058.html
標籤:NoSQL
