aof檔案:
上面已經多次講過,rdb的快照定時dump機制無法保證很好的資料永續性。如果我們的應用確實非常關注此點,我們可以考慮使用redis中的aof機制。對於redis伺服器而言,其預設的機制是rdb,如果需要使用aof,則需要修改配置檔案中的以下條目:
從現在起,redis在每一次接收到資料修改的命令之後,都會將其追加到aof檔案中。在redis下一次重新啟動時,需要載入aof檔案中的資訊來構建最新的資料到記憶體中。
redis.conf:(修改配置的配置檔案)
--在預設情況下,當aof進行重寫時,aof的同步資訊不是關閉的。在這種情況下,子程序rewrite(bgrewriteaof命令可進行aof檔案非同步重寫)在寫磁碟,在rewrite的過程中 子程序對主程序造成了磁碟阻塞(disk io衝突),導致了報警資訊的產生。
auto-aof-rewrite-percentage 100 --重啟後,如果aof檔案當前大小比重啟時增長了百分之100就觸發重寫aof,做整合
auto-aof-rewrite-min-size 64mb --重啟後,如果aof檔案大小達到了64m就觸發重寫,做整合
aof-load-truncated yes --如果aof檔案是被清空了的,重啟時是否過載。有時候會有異常被清空,但是如果人家真的是想清空的,那也是得裝載,所以預設為yes就好。
開始測試:
第一步:按照上面把配置檔案redis.conf修改好,然後啟動redis服務和客戶端(分兩個終端)
cd /usr/local/redis
./bin/redis-server redis.conf
cd/usr/local/redis
./bin/redis-cli
第二步:在客戶端新建乙個key,然後新開終端進/var/redis裡面看是否產生了aof檔案,產生了即aof持久化生效
set strkey aa
可以看到命令已經存進來了。第乙個命令是選擇資料庫,預設為資料庫0。第二條命令就是set strkey aa,其中 *3 表示的是命令由三部分組成。
第三步:重啟伺服器,看key是否還存在
keys *
第四步:設定乙個string型別的key,值為2,然後重複incr key命令,看aof檔案內容。
命令如下:
set key1 1
incr key
incr key
....
aof內容如下:
可以發現,重複的命令會重複地寫進aof檔案裡面,此時如果我們進行重寫,結果會程式設計什麼樣呢?
第五步:在客戶端執行
bgrewriteaof
命令,可進行後台程序重寫aof。重寫後看看aof檔案內容。
可發現:最後省去所有命令,將key1的最後值賦給key1,即命令set key1 最後值
所以:上面的關於重寫的命令auto-aof-rewrite-percentage,auto-aof-rewrite-min-size都是問了檔案達到了一定的大小就進行重寫,
就是對aof檔案進行整合:將多餘的命令都省去,直接改為賦值。
redis持久化 AOF持久化
1.aof持久化原理 aof持久化會將被執行的寫命令寫到aof檔案的末尾。在恢復的時候,redis只要從頭到尾重新執行一次aof檔案包含的所有寫命令 2.配置選項 固態硬碟禁用always選項,在某些情況頻繁讀寫會大大降低固態硬碟的壽命 4.aof檔案的重寫和壓縮 aof檔案裡面記錄了所有的命令而不...
Redis的持久化 AOF
redis的aof持久化策略是將傳送到redis服務端的每一條命令都記錄下來,並且儲存到硬碟中的aof檔案中,類似打日誌檔案,來一條命令就記錄一條。aof設定 aof測試 當客戶端向伺服器傳送一些redis命令時,redis會將所執行的命令記錄到aof檔案中,如下所示 當redis伺服器重啟後,會將...
Redis的持久化 AOF
redis的aof持久化策略是將傳送到redis服務端的每一條命令都記錄下來,並且儲存到硬碟中的aof檔案中,類似打日誌檔案,來一條命令就記錄一條。aof設定 aof測試 當客戶端向伺服器傳送一些redis命令時,redis會將所執行的命令記錄到aof檔案中,如下所示 當redis伺服器重啟後,會將...