Redis運維和開發學習筆記(2) redis持久化
文章目錄
- Redis運維和開發學習筆記(2) redis持久化
- 持久化
- 持久化方式一:RDB
- 觸發~~的三種~~方式
- 1. save命令
- 2. bgsave
- 配置
- 觸發機制
- RDB 總結
- 持久化方式二:AOF
- AOF的三種策略
- 三種策略的優缺點
- AOF重寫機制
持久化
-
redis將所有數據保存在內存中,對數據的更新異步地保存在磁盤上
- 快照
- MySQL Dump
- Redis RDB
- 寫日志
- MySQL Binlog
- Hbase HLog
- Redis AOF
- 快照
-
RDB存在的問題
- 耗時,耗性能
- 丟失數據
持久化方式一:RDB
RDB是Redis用來進行持久化的一種方式,是把當前內存中的數據集快照寫入磁盤,也就是 Snapshot 快照(數據庫中所有鍵值對數據)。恢復時是將快照文件直接讀到內存里。
調用forks 生成一個子進程 子進程復制數據集到一個臨時的rdb文件中 當子進程完成對數據集的復制后,redis會用新的rdb文件,并刪除舊得rdb文件
觸發的三種方式
1. save命令
- 過程
client->redis->創建RDB文件(二進制)
redis> save
ok
2. bgsave
-
過程
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qEl1FSOy-1572053410723)(media/15637201103316/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202019-07-21%2022.56.06.png)] -
兩者對比
save與sbgsave| 命令 | save | bgsave |
| — | — | — |
| IO類型 | 同步 | 異步 |
| 阻塞? | 是 | 是(阻塞發生在fork) |
| 復雜度 | O(n) | O(n) |
| 優點 | 不消耗額外的內存 | 不阻塞客戶端命令 |
| 缺點 | 阻塞客戶端命令 | fork消耗內存 |
配置
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir ./ (設置路徑)
stop-writes-on-bgsave-error yes(如果bgsave發生錯誤就停止寫入)
rdbcompression yes(采用壓縮格式)
rdbchecksum yes(采用校驗和)
觸發機制
- 全量復制(主會自動生成rdb文件)
- debug reload 不講內存清空的重啟,觸發rdb文件生成
- shutdown觸發rdb生成
RDB 總結
- RDB是 Redisp內存到硬盤的快照,用于持久化
- save通常會阻 ARedis塞
- bgsaveTZRedis,但是會fork新進程
- save自動配置滿足任一就會被執行。
- 有些觸發機制不容忽視
持久化方式二:AOF
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Tz5XGcNh-1572053410724)(media/15637201103316/%E5%9B%BE%E7%89%87%201.png)]
| 時間戳 | save |
| — | — |
| T1 | 執行多條命令 |
| T2 | 滿足RDB條件自動創建 |
| T3 | 再次執行多條寫命令 |
| T4 | 宕機 |
| | 數據丟失 |
寫一條命令,就在AOF增加一條命令。當redis宕機,就是用AOF對數據進行完整恢復。
AOF的三種策略
- always
redis執行寫命令,是將命令卸載緩沖區,每條命令fsycn到硬盤。 - everysec
redis執行寫命令,是將命令卸載緩沖區,每秒把命令fsycn到硬盤。 - no
redis執行寫命令,是將命令卸載緩沖區,由操作系統判斷把命令fsycn到硬盤。
三種策略的優缺點
命令 | always | everysec | no |
---|---|---|---|
優點 | 不丟失數據 | 每秒一次Sync丟1秒數據 | 不用管 |
缺點 | 1O開銷較大,一般的sata盤只有幾百TPS | 丟1秒數據 | 不可控 |
AOF重寫機制
原生AOF | AOF 重寫 |
---|---|
set hello world | set hello hehe |
set hello jave | |
set hello hehe |
減少磁盤占用量,加快恢復速度
-
兩種方式
bgrewriteaof(fork子進程,完成重寫)
AOF重寫配置 -
配置
| 配置名 | 含義 |
| — | — |
| Auto-aof-rewrite-min-size | AOF文件重寫需要的尺寸 |
| Auto-aof-rewrite-percentage | AOF增長率 | -
統計
| 統計名 | 含義 |
| — | — |
| aof_current_size | AOF 當前尺寸 |
| aof_base_size | AOF上次啟動和重寫的尺寸 | -
自動觸發機制
aof_current_size > Auto-aof-rewrite-min-size
(aof_current_size - aof_base_size)/aof_base_size > Auto-aof-rewrite-percentage -
AOF重寫流程