{eval=Array;=+count(Array);}
(1)在 Redis 實(shí)現(xiàn)持久化有兩種方式:AOF 日志 和 RDB 快照;
(2)AOF 日志
◆ 命令執(zhí)行成功后,才記錄日志;
◆ 命令執(zhí)行后進(jìn)行日志記錄,不會堵塞當(dāng)前的寫操作。
◆ 命令執(zhí)行完,日志記錄前宕機(jī),數(shù)據(jù)會丟失;
◆ AOF 日志在主線程中執(zhí)行,有 IO 瓶頸時會對后面的操作有堵塞風(fēng)險;
◆ 數(shù)據(jù)量比較大的時候,恢復(fù)很慢。
◆ 配置項(xiàng)(appendfsync)
◆ Always,同步寫回磁盤:每個寫命令執(zhí)行完,立即同步將日志寫回磁盤;
◆ Everysec,每秒寫回磁盤:每個寫命令執(zhí)行完,只是先把日志寫到 AOF 文件的內(nèi)存緩沖區(qū),每隔一秒把緩沖區(qū)中的內(nèi)容寫入磁盤;
◆ No,操作系統(tǒng)控制的寫回磁盤:每個寫命令執(zhí)行完,只是先把日志寫到 AOF 文件的內(nèi)存緩沖區(qū),由操作系統(tǒng)決定何時將緩沖區(qū)內(nèi)容寫回磁盤。
(3)RDB 快照
◆ 和 AOF 相比較,RDB 快照記錄的是某一個時刻的數(shù)據(jù),數(shù)據(jù)恢復(fù)是直接將 RDB 文件讀入內(nèi)存,速度很快;
◆ 生成 RDB 文件的兩種方式:
◆ save:在主線程中執(zhí)行,會導(dǎo)致阻塞;
◆ bgsave:創(chuàng)建一個子進(jìn)程,專門用于寫入 RDB 文件,避免了主線程的阻塞,這也是 Redis RDB 文件生成的默認(rèn)配置。子進(jìn)程是由主線程 fork 生成的,可以共享主線程的所有內(nèi)存數(shù)據(jù)。
◆ RDB 快照的間隔時間不宜設(shè)置過短,因?yàn)轭l繁進(jìn)行 Redis 的全量快照,會帶來性能問題:
◆ 前一個快照還沒做完,后面一個開始了,會給磁盤帶來壓力;
◆ bgsave 的子進(jìn)程雖然不會阻塞主線程,但創(chuàng)建的過程會阻塞,頻繁創(chuàng)建也會帶來性能問題。
◆ 解決上面問題的一種辦法就是使用增量快照;
◆ 在 Redis 4.0 中提出了一種混合 AOF 日志和 RDB 快照的方式:
◆ RDB 快照的間隔時間可以設(shè)置比較大,就不會影響到主線程的操作;
◆ 在快照的間隔期間可以使用 AOF 日志記錄所有的操作,當(dāng)下一次做全量 RDB 快照的時候,清空 AOF 日志;
◆ 通過 aof-use-rdb-preamble yes 來進(jìn)行設(shè)置。
1
回答1
回答1
回答0
回答0
回答0
回答5
回答0
回答0
回答0
回答