一犬金、持久化的作用
redis所有的數(shù)據(jù)都存在內存中,對數(shù)據(jù)的更新將異步地保存到磁盤上六剥。
1.什么是持久化晚顷?
數(shù)據(jù)從內存保存到磁盤的過程叫做持久化。
2.持久化的方式
- 快照 MySQL Dump疗疟、Redis RDB
- 寫日志 MySQL Binlog该默、Redis AOF
二、RDB
是Redis內存到硬盤的快照策彤,用于持久化
RDB觸發(fā)機制
1.save命令
client執(zhí)行save命令栓袖,redis就會生成一個RDB文件默認叫dump.rdb(以舊換新的策略)匣摘。是一個同步命令,會阻塞客戶端命令
2.bgsave命令
client執(zhí)行bgsave命令裹刮,會交給后臺子進程執(zhí)行(fork)音榜,不會阻塞Redis但是fork新進程
3.自動生成RDB
4.其他方式
- 全量復制
- debug reload
- shutdown
RDB存在的問題
1.O(n):耗時
2.fork():消耗內存,copy-on-write策略(寫的時候先把文件拷貝一份,往拷貝的文件里寫必指,然后再引用這個副本)
3.DiskI/O:IO消耗
4.當出現(xiàn)宕機的情況導致文件沒有寫完
三、AOF
運行原理
當發(fā)生宕機之后恕洲,通過AOF文件進行完整的恢復
AOF的三種策略
Redis寫文件首先是將內容寫到緩沖區(qū)中塔橡,然后根據(jù)不同的策略刷新至磁盤中。
1.always:每一條命令刷新一次
2.everysc:每一秒刷新一次
3.no:操作系統(tǒng)決定