redis持久化的取捨和選擇

歷精圖治發表於2018-11-11

持久化

redis所有資料保持在記憶體中,對資料的更新將非同步的儲存在磁碟上

持久化方式

  1. 快照 1: Mysql dump 2:redis rdb
  2. 寫日誌 1:mysql binlog 2: hbase hlog 3:redis aof

RDB

redis建立記憶體--- RDB(二進位制)硬碟中
redis啟動載入 ----RDB(二進位制)

觸發機制 主要三種方式

  1. save(同步)
  2. bgsave(非同步)
  3. 自動

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:有些觸發機制不容忽視

相關文章