aof是什麼
以日誌的形式來記錄每個寫操作,將redis執行過的所有指令記錄下來(讀操作不記錄),只許追加檔案,
但不可以改寫檔案,redis啟動之初會讀取該檔案重新構建資料,換言之,redis重啟的話就根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作
配置
種方式在許多應用中已經足夠用了
# no表示不執行fsync,由作業系統保證資料同步到磁碟,速度最快。
# always表示每次寫入都執行fsync,以保證資料同步到磁碟。
# everysec表示每秒執行一次fsync,可能會導致丟失這1s資料。
全性auto-aof-rewrite-min-size # 設定重寫的基準值
auto-aof-rewrite-percentage #設定重寫的基準值
aof 啟動/修復/恢復
正常恢復:
將有資料的aof檔案複製乙份儲存到對應目錄(config get dir)
異常恢復:
啟動:設定yes
rewrite是什麼:
aof 採用檔案追加方式,檔案會越來越大,為避免出現此種情況,新增了重寫機制,當aof檔案的大小超過所設定的閾值時,
redis 就會啟動aof 檔案的內容壓縮,只保留可以恢復資料的最小指令集,可以使用命令 bgrewriteaof !
重寫原理:
aof 檔案持續增長而過大時,會fork出一條新程序來將檔案重寫(也是先寫臨時檔案最後再rename),遍歷新程序的記憶體中資料,
每條記錄有一條的set語句。重寫aof檔案的操作,並沒有讀取舊的aof檔案,這點和快照有點類似!
觸發機制:
redis會記錄上次重寫時的aof大小,預設配置是當aof檔案大小是上次rewrite後大小的已被且檔案大於64m的觸發。
行家一出手,就只有沒有,內行看門道,外行看熱鬧
優點和缺點
優點:但資料完整性比較好
缺點:1、相同資料集的資料而言,aof 檔案要遠大於 rdb檔案,恢復速度慢於 rdb。
2、aof 執行效率要慢於 rdb,每秒同步策略效率較好,不同步效率和rdb相同。
小結
總結1、rdb 持久化方式能夠在指定的時間間隔內對你的資料進行快照儲存
2、aof 持久化方式記錄每次對伺服器寫的操作,當伺服器重啟的時候會重新執行這些命令來恢復原始的資料,aof命令以redis 協議追加儲存每次寫的操作到檔案末尾,
redis還能對aof檔案進行後台重寫,使得aof檔案的體積不至於過大。
3、只做快取,如果你只希望你的資料在伺服器執行的時候存在,你也可以不使用任何持久化
4、同時開啟兩種持久化方式
在這種情況下,當redis重啟的時候會優先載入aof檔案來恢復原始的資料,因為在通常情況下aof檔案儲存的資料集要比rdb檔案儲存的資料集要完整。
rdb 的資料不實時,同時使用兩者時伺服器重啟也只會找aof檔案,那要不要只使用aof呢?作者建議不要,因為rdb更適合用於備份資料庫(aof在不斷變化不好備份),快速重啟,而且不會有aof可能潛在的bug,留著作為乙個萬一的手段。
5、效能建議
因為rdb檔案只用作後備用途,建議只在sl**e上持久化rdb檔案,而且只要15分鐘備份一次就夠
了,只保留 s**e 900 1 這條規則。
如果enable aof ,好處是在最惡劣情況下也只會丟失不超過兩秒資料,啟動指令碼較簡單只load自己的aof檔案就可以了,
代價一是帶來了持續的io,二是aof rewrite 的最後將 rewrite 過程中產生的新資料寫到新檔案造成的阻塞幾乎是不可避免的。
只要硬碟許可,應該儘量減少aof rewrite的頻率,aof重寫的基礎大小預設值64m太小了,可以設到5g以上,預設超過原大小100%大小重
寫可以改到適當的數值。
如果不enable aof ,僅靠 master-sl**e repllcation 實現高可用性也可以,能省掉一大筆io,也減少了rewrite時帶來的系統波動。代價是如果master/sl**e 同時倒掉,會丟失十幾分鐘的資料,啟動指令碼也要比較兩個 master/sl**e 中的 rdb檔案,載入較新的那個,微博就是這種架構。
Redis學習(六)Redis鍵 key
redis 鍵命令用於管理 redis 的鍵。redis 鍵命令的基本語法如下 redis 127.0.0.1 6379 command key name redis 127.0.0.1 6379 set runoobkey redis okredis 127.0.0.1 6379 del runo...
redis個人學習筆記 六 Redis的發布訂閱
程序間的一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。psubscribe pattem pattern 訂閱乙個或者多個符合給定模式的頻道 pubsub subcommand argument argument 檢視訂閱與發布系統狀態 publish channel mes...
Redis系列六 Redis事務
在redis事務中可以一次執行多個命令,本質是一組命令的集合。乙個事務中的所有命令都會序列化,按順序地序列化執行而不會被其它命令插入,不許加塞。乙個佇列中,一次性 順序性 排他性的執行一系列命令。case1 正常執行 執行exec全部成功 case2 放棄事務 執行discard case3 全體連...