redis持久化的取捨和選擇
阿新 • • 發佈:2018-12-20
持久化
redis所有資料保持在記憶體中,對資料的更新將非同步的儲存在磁碟上
持久化方式
- 快照 1: Mysql dump 2:redis rdb
- 寫日誌 1:mysql binlog 2: hbase hlog 3:redis aof
RDB
redis建立記憶體--- RDB(二進位制)硬碟中
redis啟動載入 ----RDB(二進位制)
觸發機制 主要三種方式
- save(同步)
- bgsave(非同步)
- 自動
save命令
客戶端 儲存檔案後建立RDB檔案 二進位制 儲存的時候會阻塞
檔案策略:如果存在新的RDB檔案會替換老
複雜度:O
bgsave
1:bgsave
2:fork (依然會阻塞redis)
3:create RDB
4:bgsave successfully
子程序
bgsave
background saving started
檔案策略和複雜度相同
save與bgsave對比
命令 | save | bgsave |
---|---|---|
IO型別 | 同步 | 非同步 |
阻塞 | 是 | 是阻塞在fork |
複雜度 | O | O |
優點 | 不會消耗記憶體 | 不阻塞客戶端命令 |
缺點 | 阻塞客戶端命令 | 需要fork,消耗記憶體 |
自動生成RDB
save配置 :60秒鐘 生成1萬條
預設配置
配置 | seconds | change |
---|---|---|
save | 900 | 1 |
save | 300 | 10 |
save | 60 | 10000 |
save 900 1 save 300 10 save 60 10000 dbfilename dump.rdb dir ./ stop-writes-on-bgsave-error yes 如果出現錯誤是否繼續 是 rdbcompression yes 是否對資料進行壓縮 是 rdbchecksum yes 是否對資料進行校驗 是
dbfilename dump-${port}.rdb
dir /bigdiskpath 大硬碟路徑
觸發機制 不容忽略方式
1:全量複製
2:debug reload
3:shutdown
mkdir data mkdir config rm -rf redis-6382.conf cp ../redis.conf . ll vim redis-6379.conf #修改配置 daemonize 守護程序方式 yes pidfile redis-6379.pid logfile "6379.log" #save 900 1 #save 300 10 #save 60 10000 dbfilename dump-6379.rdb redis-server redis-6379.conf wq redis-server redis-6379.conf redis-cli dbsize info memory redis-cli set hello world get hello save get hello (在阻塞)
bgsave
Background saving started
redis-cli shutdown
redis-server redis-6379.conf
dbsize
RDB總結
1:RDB是Redis記憶體到硬碟的快照,用於持久化
2:save通常會阻塞redis
3:bgsave不會阻塞redis,但是會fork新程序
4:save自動配置滿足任一就會被執行
5:有些觸發機制不容忽視