1. 程式人生 > >Redis 存儲機制

Redis 存儲機制

安全性 大小 jsb 文件大小 積累 center 變化 iss 相對

Redis存儲機制分成兩種Snapshot和AOF。無論是那種機制,Redis都是將數據存儲在內存中。

Snapshot工作原理: 是將數據先存儲在內存,然後當數據累計達到某些設定的伐值的時候,就會觸發一次DUMP操作,將變化的數據一次性寫入數據文件(RDB文件)。

技術分享

AOF 工作原理: 是將數據也是先存在內存,但是在存儲的時候會使用調用fsync來完成對本次寫操作的日誌記錄,這個日誌揭露文件其實是一個基於Redis網絡交互協議的文本文件。AOF調用fsync也不是說全部都是無阻塞的,在某些系統上可能出現fsync阻塞進程的情況,對於這種情況可以通過配置修改,但默認情況不要修改。AOF最關鍵的配置就是關於調用fsync追加日誌文件的平率,有兩種預設頻率,always每次記錄進來都添加,everysecond 每秒添加一次。兩個配置各有所長後面分析。由於是采用日誌追加的方式來持久話數據,所以引出了第二個日誌的概念:rewrite. 後面介紹它的由來。

技術分享

存儲模式性能和安全比較:

1.性能

Snapshot方式的性能是要明顯高於AOF方式的,原因有兩點:

采用2進制方式存儲數據,數據文件比較小,加載快速。
存儲的時候是按照配置中的save策略來存儲,每次都是聚合很多數據批量存儲,寫入的效率很好,而AOF則一般都是工作在實時存儲或者準實時模式下。相對來說存儲的頻率高,效率卻偏低。

2.數據安全

AOF數據安全性高於Snapshot存儲,原因:

Snapshot存儲是基於累計批量的思想,也就是說在允許的情況下,累計的數據越多那麽寫入效率也就越高,但數據的累計是靠時間的積累完成的,那麽如果在長時間數據不寫入RDB,但Redis又遇到了崩潰,那麽沒有寫入的數據就無法恢復了,但是AOF方式偏偏相反,根據AOF配置的存儲頻率的策略可以做到最少的數據丟失和較高的數據恢復能力。
說完了性能和安全,這裏不得不提的就是在Redis中的Rewrite的功能,AOF的存儲是按照記錄日誌的方式去工作的,那麽成千上萬的數據插入必然導致日誌文件的擴大,Redis這個時候會根據配置合理觸發Rewrite操作,所謂Rewrite就是將日誌文件中的所有數據都重新寫到另外一個新的日誌文件中,但是不同的是,對於老日誌文件中對於Key的多次操作,只保留最終的值的那次操作記錄到日誌文件中,從而縮小日誌文件的大小。這裏有兩個配置需要註意:
auto-aof-rewrite-percentage 100 (當前寫入日誌文件的大小占到初始日誌文件大小的某個百分比時觸發Rewrite)
auto-aof-rewrite-min-size 64mb (本次Rewrite最小的寫入數據良)

兩個條件需要同時滿足。

Redis 存儲機制