上一篇我們講解了redis持久化的RDB方式,對於兩個保存點之間的數據可能丟失的情況,我們今天講解的另外一種redis持久化的方式AOF可以彌補。
工作原理:
就是將執行的每一條命令寫到文本文件中。這樣速度是不是又下來了啊。
配置:
appendonly no # 是否打開 aof日誌功能
寫入的頻率:
appendfsync always # 每1個命令,都立即同步到aof. 安全,速度慢
appendfsync everysec # 折衷方案,每秒寫1次
appendfsync no # 寫入工作交給操作系統,由操作系統判斷緩衝區大小,統一寫入到aof. 同步頻率低,速度快,
no-appendfsync-on-rewrite yes: # 正在導出rdb快照的過程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重寫時的大小,增長率100%時,重寫
auto-aof-rewrite-min-size 64mb #aof文件,至少超過64M時,
問題:
每一個命令都寫到了aof中這樣大大降低了我們的寫入速度。我們在對於一個key 操作100次的時候,這個key最總只有一個具體的值,但是aof確有一百多條的記錄,來記錄我們每次key的變更,這樣文件會變得很大,同時當我們拿着這個AOF來回複數據的時候,就比較傻了,會對於一個key來回操作100多次,這樣和麻煩。
重寫
爲此redis提供了重寫的方式,Redis提供了bgrewriteaof命令。收到此命令後Redis將使用與快照類似的方式將內存中的數據以命令的方式保存到臨時文件中,最後替換原來的文件,以此來實現控制AOF文件的合併重寫。由於是模擬快照的過程,因此在重寫AOF文件時並沒有讀取舊的AOF文件,而是將整個內存中的數據庫內容用命令的方式重寫了一個新的AOF文件。
redis持久化這一塊我只是簡單的簡紹了一下,如果想深入的瞭解可以參考:
http://www.cnblogs.com/zhoujinyi/archive/2013/05/26/3098508.html