redis内存淘汰和持久化_redis 持久化
一、RDB持久化
(一)、RDB介紹
可以在指定的時(shí)間間隔內(nèi)生成數(shù)據(jù)集的 時(shí)間點(diǎn)快照(point-in-time snapshot),新快照會(huì)覆蓋老快照
(二)、優(yōu)點(diǎn)
壓縮格式,恢復(fù)速度快,適合于用做備份,主從復(fù)制也是基于RDB持久化功能實(shí)現(xiàn)的
(三)、缺點(diǎn)
不是實(shí)時(shí)的,會(huì)有數(shù)據(jù)丟失,操作比較重量
(四)、原理
(五)、配置方法
第一步:修改配置文件
vim /data/6379/redis.conf
#添加 dir /data/6379 #持久化文件存儲位置 dbfilename dump.rdb #RDB持久化數(shù)據(jù)文件 save 900 1 #900秒內(nèi)如果有一次變更則進(jìn)行一次持久化 save 300 10 #300秒內(nèi)如果有10次變更則進(jìn)行一次持久化 save 60 10000 #60秒內(nèi)如果有10000次變更則進(jìn)行一次持久化第二步:重新啟動(dòng)redis
redis-cli -a 123456 shutdown redis-server /data/6379/redis.conf注意事項(xiàng)
1、沒配置save參數(shù)時(shí)
1.shutdown/pkill/kill都不會(huì)持久化保存
2.可以手動(dòng)執(zhí)行bgsave
3、配置save參數(shù)時(shí)
1.shutdown/pkill/kill均會(huì)自動(dòng)觸發(fā)bgsave持久化保存數(shù)據(jù)
2.pkill -9 不會(huì)觸發(fā)持久化
3、恢復(fù)時(shí)
1.持久化數(shù)據(jù)文件名要和配置文件里定義的一樣才能被識別
2.RDB文件只有一個(gè)數(shù)據(jù)文件,遷移和備份只要這一個(gè)RDB文件即可
二、AOF持久化
(一)、AOF介紹
AOF(append-only log file):記錄服務(wù)器執(zhí)行的所有寫操作命令,并在服務(wù)器啟動(dòng)時(shí),通過重新執(zhí)行這些命令來還原數(shù)據(jù)集
AOF 文件中的命令全部以 Redis 協(xié)議的格式來保存,新命令會(huì)被追加到文件的末尾
(二)、優(yōu)點(diǎn)
可以最大程度保證數(shù)據(jù)不丟
(三)、缺點(diǎn)
日志記錄量級比較大,持久化時(shí)間較長
(四)、原理
(五)、配置方法
第一步:修改配置文件
vim /data/6379/redis.conf
#添加 appendonly yes #開啟AOF持久化 appendfilename "redis.aof" #持久化存儲文件 appendfsync always #每次操作成功都執(zhí)行一次持久化 #或者 建議設(shè)置 appendfsync everysec #每秒鐘提交一次持久化 #或者 appendfsync no #不進(jìn)行持久化第二步:重啟redis
redis-cli -a 123456 shutdown redis-server /data/6379/redis.conf(六)、AOF重寫機(jī)制
1、重寫機(jī)制原理
(1)redis主進(jìn)程通過fork創(chuàng)建子進(jìn)程
(2)子進(jìn)程根據(jù)當(dāng)前redis內(nèi)存中的數(shù)據(jù)生成數(shù)據(jù)庫重建命令序列到臨時(shí)文件中
(3)父進(jìn)程繼承client的新請求,把請求中的寫操作繼續(xù)追加至原來的AOF文件(而不是直接寫入臨 時(shí)文件,避免寫操作失敗帶來的問題);額外地,這些新的寫請求還會(huì)被放置于一個(gè)緩沖隊(duì)列中
(4)子進(jìn)程重寫完成,會(huì)通知父進(jìn)程,父進(jìn)程把緩沖中的命令寫到臨時(shí)文件中
(5)父進(jìn)程將臨時(shí)文件替換掉舊的AOF文件
2、重寫機(jī)制注意事項(xiàng)
和RDB一樣,如果當(dāng)前的數(shù)據(jù)量巨大,那么創(chuàng)建子進(jìn)程的過程會(huì)很耗時(shí)。
在大數(shù)據(jù)的處理工作中,文件的刪除也是一項(xiàng)比較麻煩的工作。
像我們普通的筆記本電腦,刪除一個(gè)幾GB的文件都是一項(xiàng)很耗時(shí)的工作,
更何況大數(shù)據(jù)的量級遠(yuǎn)遠(yuǎn)大過我們?nèi)粘J褂玫臄?shù)據(jù)。
所以在替換aof文件時(shí),如果舊的aof很大,刪除它也是一個(gè)很耗時(shí)的過程。
當(dāng)然這并不是aof或者redis的缺點(diǎn),只是可能會(huì)出現(xiàn)的一個(gè)客觀情況
AOF注意事項(xiàng)
1.aof修復(fù)命令不要?,因?yàn)樗男迯?fù)?案?常粗暴,??切,從出錯(cuò)的地?到最后全部刪除
2.任何操作之前,先備份數(shù)據(jù)
三、redis 持久化方式有哪些?有什么區(qū)別?
rdb:基于快照的持久化,速度更快,一般用作備份,主從復(fù)制也是依賴于rdb持久化功能
aof:以追加的方式記錄redis操作日志的文件。可以最大程度的保證redis數(shù)據(jù)安全,類似于mysql的binlog
四、save bgsave 區(qū)別?
共同點(diǎn):都能實(shí)現(xiàn)redis持久化功能。
不同點(diǎn):
SAVE: 前臺,阻塞redis正常寫入,直到持久化完成。
BGSAVE:后臺,開啟子線程,異步的持久化功能,不會(huì)阻塞redis正常寫入。
五、AOF和RDB如何選擇
1.開啟混合模式
2.開啟aof
3.不開啟rdb
4.rdb采?定時(shí)任務(wù)的?式定時(shí)備份
5.可以從庫開啟RDB進(jìn)?備份
總結(jié)
以上是生活随笔為你收集整理的redis内存淘汰和持久化_redis 持久化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后台使用orm多还是直接sql_Djan
- 下一篇: MongoDB副本集、分片集的伪分布式部