什么是Redis的持久化
Redis上所有的數(shù)據(jù)都保存在內(nèi)存中矗蕊,對數(shù)據(jù)的更新將異步地保存在磁盤上。
Redis持久化的兩種方式
快照 (RDB)
將數(shù)據(jù)保存在本地中蓄髓,對數(shù)據(jù)進(jìn)行恢復(fù)
寫日志 (AOF)
將命令保存在本地日志中贡未,恢復(fù)時(shí)通過恢復(fù)命令進(jìn)行恢復(fù)數(shù)據(jù)
RDB
由redis創(chuàng)建RDB文件保存在磁盤中汹族。每次啟動(dòng)進(jìn)行載入讼昆。
觸發(fā)的三種機(jī)制
save
同步創(chuàng)建會阻塞進(jìn)程(其他命令無法執(zhí)行)
bgsave
異步創(chuàng)建由redis執(zhí)行fork方法創(chuàng)建redis子進(jìn)程 由子進(jìn)程創(chuàng)建RDB文件
自動(dòng)生成RDB
多少秒之內(nèi)發(fā)生多少次變化自動(dòng)保存 關(guān)閉 性能太差啦
save 900 1
save 300 10
save 60 10000
命令
stop-writes-on-bgsave-error yes 當(dāng)寫入出現(xiàn)錯(cuò)誤是是否停止寫入 yes
rdbcompression yes 壓縮格式
rdbchecksum yes 是否對rdb進(jìn)行檢驗(yàn)
AOF
保存命令的方式對數(shù)據(jù)進(jìn)行持久化
三種策略
always 實(shí)時(shí)進(jìn)行存儲 每條命令都執(zhí)行fsync 進(jìn)入硬盤 數(shù)據(jù)不會丟失 影響性能 IO 開銷大
everysec 每秒進(jìn)行存儲 丟失丟失1s數(shù)據(jù)
no 操作系統(tǒng)決定什么時(shí)候刷新進(jìn)aof 不穩(wěn)定 不要用!
AOF重寫
對大量命令進(jìn)行整理保留有用命令
減少硬盤占用量 加速恢復(fù)速度
例如
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="sql" cid="n37" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">set hello world
set hello hehe
set hello java
-- 最后經(jīng)過AOF重寫會只保留 set hello java 來節(jié)省空間</pre>
重寫實(shí)現(xiàn)的方式
bgrewriteof 命令
通過命令使redis 生成子進(jìn)程來進(jìn)行AOF重寫生產(chǎn)AOF文件
配置
auto-aof-rewrite-min-size AOF重寫需要的尺寸
auto-aof-rewrite-percentage AOF 文件增長率
使用配置
appendonly yes 啟動(dòng)重寫
appendfsync everysec 每秒
no-appendfync-on-rewrite yes 重寫不做aof操作
auto-aof-rewrite-min-size 64mb
auto-aof-rewrite-percentage 100
統(tǒng)計(jì)名
aof_current_size aof當(dāng)前尺寸
aof_base_size aof上次啟動(dòng)和重寫尺寸
自動(dòng)觸發(fā)機(jī)制
aof_current_size>auto-aof-rewrite-min-size
aof_current_size-aof_base_size/aof_base_size > auto-aof-rewrite-percentage
權(quán)衡
RDB關(guān)閉 集中管理時(shí)可以使用
AOF 開啟 AOF在集中管理時(shí)進(jìn)行重寫 everysec 自動(dòng)生成