Redis的多種持久化方式總結

來源:互聯網
上載者:User

標籤:redis的多種持久化方式總結

話題:Redis的多種持久化方式:

Redis是個支援持久化的記憶體資料庫,redis需要經常將記憶體中的資料同步到磁碟來保證持久化。

1、RDB方式(Snapshotting預設快照方式):

1.1)配置:

save 900 1       #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump記憶體快照。save 300 10      #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump記憶體快照。save 60 10000    #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump記憶體快照。


1.2)工作原理:

1.2.1)Redis使用fork函數複製一份當前進程(父進程)的副本(子進程);

1.2.2)父進程繼續接收並處理用戶端發來的命令,而子進程開始將記憶體中的資料寫入硬碟中的臨時檔案;

1.2.3)當子進程寫入完所有資料後會用該臨時檔案替換舊的RDB檔案,至此一次快照操作完成。


1.3)查看dump.rdb:

127.0.0.1:7000> config get dir1) "dir"2) "/usr/local/redis/db"127.0.0.1:7000>


1.4)優點:

1.4.1)RDB是個非常緊湊的檔案,儲存了redis在某個時間點上的資料集,使得我們可以通過定時備份RDB檔案來實現RedisDatabase Backup和災難恢複,也可以將其傳送到其他的資料中心用於儲存。

1.4.2)RDB可以最大化redis的效能,執行RDB持久化時只需要fork一個子進程,並由子進程進行持久化工作,父進程不需要處理任何磁碟I/O操作。

1.4.3)RDB在恢複大資料集時比AOF要快,啟動效率要高許多。

1.4.4)RDB檔案是經過壓縮(可以配置rdbcompression參數以禁用壓縮節省CPU佔用)的二進位格式,所以佔用的空間會小於記憶體中的資料大小,更加利於傳輸。


1.5)缺點:

1.5.1)每次快照持久化都是將記憶體資料完整寫入到磁碟一次,並不是增量的只同步增資料。如果資料量大的話,而且寫操作比較多,必然會引起大量的磁碟io操作,可能會嚴重影響效能。

1.5.2)快照方式是在一定間隔時間做一次的,所以如果redis意外down掉的話,就會丟失最後一次快照後的所有修改,有一些資料丟失的風險。

1.5.2)client的save或者bgsave命令通知redis做一次快照持久化不推薦。

127.0.0.1:7000> saveOK127.0.0.1:7000>

原因:save操作是在主線程中儲存快照的,由於redis是用一個主線程來處理所有 client的請求,這種方式會阻塞所有client請求。所以不推薦使用。


2、Append-only file(縮寫aof)的方式:

2.1)配置

appendonly yes  #開啟aofappendfilename "appendonly.aof"  #名字# appendfsync always   # 每次執行寫入都會執行同步,最安全也最慢appendfsync everysec   # 每秒執行一次同步操作# appendfsync no #不主動進行同步操作,而是完全交由作業系統來做(即每30秒一次),最快也最不安全。#配置寫入AOF檔案後,要求系統重新整理硬碟緩衝的機制auto-aof-rewrite-percentage 100  # 當目前的AOF檔案大小超過上一次重寫時的AOF檔案大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF檔案大小為依據auto-aof-rewrite-min-size 64mb   # 允許重寫的最小AOF檔案大小

2.2)工作原理:

2.2.1)redis調用fork ,現在有父子兩個進程

2.2.2)子進程根據記憶體中的資料庫快照集,往臨時檔案中寫入重建資料庫狀態的命令

2.2.3)父進程繼續處理client請求,除了把寫命令寫入到原來的aof檔案中。同時把收到的寫命令緩衝起來。這樣就能保證如果子進程重寫失敗的話並不會出問題。

2.2.4.)當子進程把快照內容寫入已命令方式寫到臨時檔案中後,子進程發訊號通知父進程。然後父進程把緩衝的寫命令也寫入到臨時檔案。

2.2.5)現在父進程可以使用臨時檔案替換老的aof檔案,並重新命名,後面收到的寫命令也開始往新的aof檔案中追加。


2.3)查看aof

127.0.0.1:7000> config get dir1) "dir"2) "/usr/local/redis/db"127.0.0.1:7000>[[email protected] db]# ll總用量 8-rw-r--r-- 1 root root 146 2月   1 08:36 appendonly.aof-rw-r--r-- 1 root root  74 2月   1 09:20 dump.rdb[[email protected] db]#

2.4)優點:

2.4.1)該機制可以帶來更高的資料安全性,即資料持久性。

2.4.2)由於該機制對記錄檔的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞記錄檔中已經存在的內容。然而如果我們本次操作只是寫入了一半資料就出現了系統崩潰問題,不用擔心,在Redis下一次啟動之前,我們可以通過redis-check-aof工具來協助我們解決資料一致性的問題。

2.4.3)如果日誌過大,Redis可以自動啟用rewrite機制。即Redis以append模式不斷的將修改資料寫入到老的磁碟檔案中,同時Redis還會建立一個新的檔案用於記錄此期間有哪些修改命令被執行。因此在進行rewrite切換時可以更好的保證資料安全性。

2.4.4) AOF包含一個格式清晰、易於理解的記錄檔用於記錄所有的修改操作。事實上,也可以通過該檔案完成資料的重建。


2.5:缺點:

2.5.1)對於相同數量的資料集而言,AOF檔案通常要大於RDB檔案,持久化檔案會變的越來越大。

2.5.2) 根據同步策略的不同,AOF在運行效率上往往會慢於RDB。


3、其它

虛擬記憶體方式和diskstore方式。:(不建議,而且虛擬記憶體據說2.4版本後棄用,diskstore也不常用)

相關配置

持久化檔案會變的越來越大。vm-enabled yes          #開啟vm功能vm-swap-file /tmp/redis.swap   #交換出來的value儲存的檔案路徑/tmp/redis.swapvm-max-memory 1000000  #redis使用的最大記憶體上限,超過上限後redis開始交換value到磁碟檔案中vm-page-size 32        #每個頁面的大小32個位元組vm-pages 134217728     #最多使用在檔案中使用多少頁面,分頁檔的大小 = vm-page-size * vm-pagesvm-max-threads 4       #用於執行value對象換入換出的背景工作執行緒數量,0表示不使用背景工作執行緒

總結:

1、Redis允許同時開啟AOF和RDB,既保證了資料安全又使得進行備份等操作十分容易。重新啟動Redis後Redis會使用AOF檔案來恢複資料,因為AOF方式的持久化可能丟失的資料更少。


2、讀寫分離 通過複製可以實現讀寫分離以提高伺服器的負載能力。在常見的情境中,讀的頻率大於寫,當單機的Redis無法應付大量的讀請求時(尤其是較耗資源的請求,比如SORT命令等)可以通過複製功能建立多個從資料庫,主要資料庫只進行寫操作,而從資料庫負責讀操作。


3、從資料庫持久化 持久化通常相對比較耗時,為了提高效能,可以通過複製功能建立一個(或若干個)從資料庫,並在從資料庫中啟用持久化,同時在主要資料庫禁用持久化。當從資料庫崩潰時重啟後主要資料庫會自動將資料同步過來,所以無需擔心資料丟失。而當主要資料庫崩潰時,需要在從資料庫中使用SLAVEOF NO ONE命令將從資料庫提升成主要資料庫繼續服務,並在原來的主要資料庫啟動後使用SLAVEOF命令將其設定成新的主要資料庫的從資料庫,即可將資料同步回來。


本文出自 “永不放棄! 任志遠” 部落格,轉載請與作者聯絡!

Redis的多種持久化方式總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.