1、 文檔介紹redis
redis做爲一個內存數據庫,讀寫快,效率高,可是也會有宕機丟失數據的風險,因而就須要持久化操數據庫
Q&A: 緩存
數據量大於內存大小時應該怎麼作?安全
增長內存or採用內存淘汰策略orRedis集羣
服務器
持久化會輔助擴大Redis的存儲空間麼?
工具
不會,持久化的主要做用是數據備份,保證數據不會因進程退出而丟失優化
(在dump的基礎上開始準備Restore的實現,dump操做的第一步就是將aof文件內的記錄同步到redis內,故瞭解一下aof文件)spa
2、RDB與AOF持久化的原理操作系統
2.1 RDB日誌
RDB能夠認爲是Snapshot文件,當恢復時,經過加載RDB文件。把數據從磁盤加載讀取到Redis中。
RDB產生:(考慮快照時的操做)
RDB的加載:
Redis持久化能夠禁用,此時數據僅存在於服務器的運行時間內
Redis持久化也能夠共存,當同時存在的時候,Redis重啓是會先加載AOF文件
2.2 AOF
AOF能夠認爲是日誌文件,Append only File,每次對數據的變動或者操做都會先記錄打AOF內,當服務啓動的時候就會先讀取這些文件,從新執行一遍來恢復原始數據。
AOF提供三種同步(寫aof文件與操做數據的同步)的方式:
AOF文件的格式與解析:
AOF優化:(重寫)
當對一個如今爲0的值執行100遍「a++」操做的話,若是每一次都記錄一個操做再同步,很是浪費資源與時間,而且文件也會變大,重寫即將這一百條數據寫成set a 100,減小文件大小,而且提升載入速率
3、RDB與AOF的優缺點
3.1 RDB
優勢:
缺點:
3.2 AOF
優勢:
缺點:
3、取捨
通常來講,不考慮硬盤大小,最安全的作法是RDB與AOF同時使用,即便AOF損壞沒法修復,還能夠用RDB來恢復數據。
若是Redis的數據在你的服務中並非必要的數據,例如只是當簡單的緩存,沒有緩存也不會形成緩存雪崩。說明數據的安全可靠性並非首要考慮範圍內,那麼單獨只使用RDB就能夠了。
不推薦單獨使用AOF,由於AOF對於數據的恢復載入來講,比RDB慢。