redis是乙個高效能的記憶體資料庫,所以可以理解redis的資料都儲存在記憶體中,但如果僅僅儲存在記憶體中,當發生一些意外情況,redis掛了,程序沒了,存放在記憶體中的資料全部都沒了,那怎麼辦?redis的設計者肯定不會有這麼大的紕漏,redis有它自己的持久化機制,就是把資料落入磁碟。生產環境中會把磁碟上的資料放入像阿里雲odps等雲儲存服務上做乙個備份,當redis整個機器掛掉或者損壞,那麼我們就可以在另乙個機器上啟動redis,把備份資料檔案拷貝到機器的磁碟上,當redis啟動的時候,就會去磁碟上讀取資料
1.rdb和aof兩種持久化機制的介紹
rdb持久化機制,對redis中的資料執行週期性的持久化。
那麼就有乙個問題,隨著寫入命令的不斷增加,aof作為存放每條寫入命令的地方,也是會不斷膨脹的,不可能讓他無限的大下去,所以說,當大到一定程度的時候,aof就會做rewrite操作;rewrite 會基於當時redis記憶體中的資料,重新構造乙個更小的aof檔案,然後將舊的膨脹很大的檔案給刪除掉。
怎麼來理解redis的rewrite了?我們的redis限定了總記憶體大小為1g的容量來存放資料,當有了一百萬的資料,容量達到了1g,而我們的aof檔案也存放了100萬資料相關的寫指令,由於redis的記憶體使用要滿了,這個時候會去走記憶體淘汰策略,把一些資料從記憶體中刪除,騰出一定的空間,比如說,清理掉了50w的資料,到了一定的時間,又寫了50w的資料,所以我們的aof檔案已經存了150w資料相關的指令的日誌了,變得更加的大了,並且裡面有50w的指令日誌是不需要的,因為資料已經被刪除了,所以這種時候會基於redis當前記憶體中最新的100w資料來構建新的aof檔案,老的aof檔案就被廢棄了,不再使用。
2.兩種持久化機制的優劣
rdb持久化機制的優點
(1)rdb會生成多個資料檔案,每個資料檔案都代表了某個時刻redis的資料,這種多個資料檔案的方式,非常適合做冷備,可以將這些資料檔案傳送到遠端的雲服務儲存上做乙個備份。
(2.)rdb對redis對外提供的讀寫服務影響很小,可以讓redis保持高效能,redis主程序只需要fork乙個子程序,讓子程序執行磁碟io操作來進行rdb持久化.ps:rdb只會在一定的時間進行磁碟操作,而aof每次都會寫檔案,相比較,rdb要快一點。
(3)基於rdb資料檔案來重啟和回覆redis程序,更加快速
rdb持久化機制的缺點:
(1)由於rdb是每隔一段時間生成乙份資料檔案,所以當redis例項發生故障的時候,最大程度上會損失間隔時間內的資料。
(2)rdb每次fork子程序來執行rdb快照資料檔案生成的時候,如果資料檔案特別大,可能會導致對客戶端提供的服務暫停數毫秒,甚至數秒
aof持久化機制的優點:
(1)aof可以更好的保護資料不丟失,一般aof會每隔一秒,通過乙個後台執行緒執行一次fsync操作,最多丟失一秒的資料
(3)aof日誌檔案即使過大的時候,出現rewrite操作,也不會影響客戶端的讀寫。因為建立新的日誌檔案的時候,老的日誌檔案還是照常寫入,當新的merge後的日誌檔案ready的時候,再交換新老日誌檔案即可。
(4)aof日誌檔案的命令非常可讀。比如不小心使用了flushall命令,如果rewrite還沒有發生,就可以拷貝aof檔案,把flushall命令刪除,再通過此檔案來恢復所有資料
aof持久化的缺點:
(1)同乙份資料產生的檔案,aof日誌檔案會比rdb資料快照檔案更大
(2)aof開啟後,支援的寫qps會比rdb支援的寫qps低,因為aof一般會配置成每秒fsync一次日誌檔案,如果你做成每寫入一條資料,fsync一次,那麼redis的qps就會大降
(3)aof這種基於命令日誌/merge/回放的方式,比基於rdb每次持久化乙份資料檔案的方式,更加的脆弱,容易有bug。
(4)最重要的缺點就是做資料恢復的時候,比較慢。
兩者如何選擇?
如果僅僅使用rdb,那麼你會丟失比較多的資料,只使用aof的話,沒有rdb做冷備更簡單,以及恢復速度更快。所以我們綜合使用兩種持久化機制,用aof來保證資料不丟失,用rdb來做不同程度的冷備,在aof檔案都丟失或損壞不可用的時候,還可以使用rdb來進行快速的資料恢復
redis持久化 AOF持久化
1.aof持久化原理 aof持久化會將被執行的寫命令寫到aof檔案的末尾。在恢復的時候,redis只要從頭到尾重新執行一次aof檔案包含的所有寫命令 2.配置選項 固態硬碟禁用always選項,在某些情況頻繁讀寫會大大降低固態硬碟的壽命 4.aof檔案的重寫和壓縮 aof檔案裡面記錄了所有的命令而不...
Redis的持久化
我們都知道,redis的資料都是儲存在記憶體裡面的,導致了redis有如下特點 1.由於記憶體的容量較小,並且速度很快,所以redis相對於mysql orcle等資料庫相比,儲存的容量較小,但是io速度特別快。2.由於記憶體的臨時儲存性,在機器斷電之後記憶體裡的內容將會丟失,若redis沒有持久化...
redis的持久化
redis有兩種持久化策略 rdb 是redis的預設持久化級制。相當於照快照,儲存的是一種狀態。優點 快照速度極快 還原資料速度極快 適用於災難備份 缺點 小記憶體機器不適合,適用於記憶體充裕的計算機 rdb機制符合要求就會找快照 隨時啟動,會突然的占用一部分系統資源 伺服器正常關閉 key滿足一...