redis簡介 redis是一個基於記憶體的nosql資料庫,和傳統關係數據最大的區別就是數據是存在記憶體中而不是硬碟上,從而帶來了tps的巨大提升。但是基於記憶體的資料庫最大的缺陷就是機器斷電或者系統崩潰後數據會全部丟失。但是redis可以有一套自己的持久化機制,可以讓他在系統斷電或者崩潰後儘可能的少丟 ...
redis簡介
redis是一個基於記憶體的nosql資料庫,和傳統關係數據最大的區別就是數據是存在記憶體中而不是硬碟上,從而帶來了tps的巨大提升。但是基於記憶體的資料庫最大的缺陷就是機器斷電或者系統崩潰後數據會全部丟失。但是redis可以有一套自己的持久化機制,可以讓他在系統斷電或者崩潰後儘可能的少丟數據。下麵就來總結下redis提供的持久化機制的各個特性。
redis提供的持久化選項
redis一共提供兩種不同的持久化方法。一種是快照(snapshotting) 它可以將存於某一時刻的數據都寫入硬碟裡面。還有一種是只追加文件(append-only file AOF),它會在執行命令時,將被執行的寫入命令複製到硬碟裡面。這兩種方法既可以單獨使用也可以同時使用。
快照持久化
快照持久化通過寫入dbfilename選項指定的文件裡面,並儲存在dir選項指定的路徑上面。如果在新的快照文件創建完成之前,redis,系統或者硬體這三者之中的任意一個崩潰來,那麼redis將丟失最近一次創建快照完成之後的所以寫入數據
創建快照方法
1.通過客戶端發送bgsave命令來創建一個快照,redis會創建一個子進程來負責寫入這個快照,父進程繼續處理命令請求
2.通過客戶端發送save命令來創建一個快照,redis接到save命令在快照創建完成之前不再響應任何命令
3.用戶配置了save配置選項,如save 60 10000 ,那麼從redis最近一次創建快照開始之後,當“60秒內10000次寫入”這個條件被滿足時會自動觸發bgsave命令。如果有多個save配置滿足任意一個就會觸發bgsave。
4.redis通過shutdown命令接受到關閉伺服器請求時,或者收到標準的term命令時會執行save命令,阻塞所有客戶端,不再執行客戶端發送的命令,知道save命令執行完畢後直接關閉redis伺服器。
5.當一臺redis伺服器連接到另一臺redis伺服器,並向對方發送sync命令來開始複製操作的時候,如果主伺服器目前沒有在執行bgsave操作,或者主伺服器並非剛剛執行完bgsave操作,那麼主伺服器會執行bgsave命令。
AOF持久化
AOF持久化就是將被執行的寫命令寫到AOF文件的末尾,以此來記錄數據發送的變化。因此redis只要從頭到尾執行一次AOF文件包含的所有寫命令,就可以護膚AOF文件所記錄的數據。
AOF持久化的創建方法
通過配置 appendonly yes 來打開,通過appendsync來配置AOF文件的同步頻率。
appendsync同步頻率有下麵這些
always 每個redis寫命令都同步寫入硬碟。(嚴重影響性能)
everysec 每秒執行一次同步,顯示地將多個寫命令同步到硬碟
no 讓操作系統來決定應該何時同步。