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