搜尋
首頁後端開發C#.Net教程Redis教學(十):持久化詳解

Redis教學(十):持久化詳解

Dec 28, 2016 pm 03:03 PM
redis耐力

一、Redis提供了哪些持久化機制:

    1). RDB持久化:
    此機制是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟。
    2). AOF持久化:
    此機制將以日誌的形式記錄伺服器所處理的每一個寫入操作,在Redis伺服器啟動之初會讀取該檔案來重新建構資料庫,以確保啟動後資料庫中的數據是完整的。
    3). 無持久化:
    我們可以透過設定的方式停用Redis伺服器的持久化功能,這樣我們就可以將Redis視為一個功能加強版的memcached了。
    4). 同時應用AOF和RDB。
    
二、RDB機制的優點與缺點:

   RDB有哪些優點?

    1). 一旦採用該方式,那麼你的整個Redis資料庫將只包含一個文件,這對於文件備份而言是非常完美的。例如,你可能打算每個小時歸檔一次最近24小時的數據,同時還要每天歸檔一次最近30天的數據。透過這樣的備份策略,一旦系統出現災難性故障,我們可以非常容易的進行復原。
    2). 對於災難復原而言,RDB是非常不錯的選擇。因為我們可以非常輕鬆的將一個單獨的檔案壓縮後再轉移到其它儲存媒體上。
    3). 最大效能。對於Redis的服務進程而言,在開始持久化時,它唯一需要做的只是fork出子進程,之後再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執行IO操作了。
    4). 相較於AOF機制,若資料集很大,RDB的啟動效率會更高。
    
   RDB又有哪些劣勢呢?

    1). 如果你想確保資料的高可用性,也就是最大限度的避免資料遺失,那麼RDB將不是一個很好的選擇。因為系統一旦在定時持久化之前出現宕機現象,此前沒有來得及寫入磁碟的資料都會遺失。
    2). 由於RDB是透過fork子程序來協助完成資料持久化工作的,因此,如果當資料集較大時,可能會導致整個伺服器停止服務幾百毫秒,甚至是1秒鐘。
    
三、AOF機制的優點與缺點:

   AOF的優點有哪些呢?

    1). 此機制可帶來更高的資料安全性,即資料持久性。 Redis中提供了3中同步策略,分別是每秒同步、每修改同步和不同步。事實上,每秒同步也是非同步完成的,其效率也是非常高的,所差的是一旦系統出現宕機現象,那麼這一秒鐘之內修改的資料將會遺失。而每修改同步,我們可以將其視為同步持久化,即每次發生的資料變化都會立即記錄到磁碟中。可以預見,這種方式在效率上是最低的。至於無同步,無需多言,我想大家都能正確的理解它。
    2). 由於該機制對日誌檔案的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日誌檔案中已經存在的內容。然而如果我們這次操作只是寫入了一半資料就出現了系統崩潰問題,不用擔心,在Redis下一次啟動之前,我們可以透過redis-check-aof工具來幫助我們解決資料一致性的問題。
    3). 如果日誌過大,Redis可以自動啟用rewrite機制。即Redis以append模式不斷的將修改資料寫入到舊的磁碟檔案中,同時Redis也會建立一個新的檔案用來記錄此期間有哪些修改指令被執行。因此在進行rewrite切換時可以更好的保證資料安全性。
    4). AOF包含一個格式清晰、易於理解的日誌檔案用來記錄所有的修改作業。事實上,我們也可以透過該文件完成資料的重建。
    
    AOF的劣勢有哪些呢?
    1). 對於相同數量的資料集而言,AOF檔案通常大於RDB檔案。
    2). 根據同步策略的不同,AOF在運作效率上往往會慢於RDB。總之,每秒同步策略的效率是比較高的,同步停用策略的效率和RDB一樣有效率。
    
四、其它:

   1. Snapshotting:

    缺省情況下,Redis會將資料集的快照dump到dump.rdb檔案中。此外,我們也可以透過設定檔來修改Redis伺服器dump快照的頻率,在開啟6379.conf檔案之後,我們搜尋save,可以看到下面的設定資訊:
    save 900 1          ,如果至少有1個key發生變化,則dump記憶體快照。
    save 300 10            #300秒(5分鐘)之後,且若至少有10個key變化,則為dump記憶體快照。
    save 60 10000        #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump記憶體快照。
    
   2. Dump快照的機制:

    1). Redis先fork子程序。
    2).子程序將快照資料寫入臨時RDB檔案。
    3). 當子行程完成資料寫入作業後,再用臨時檔案取代舊的檔案。
    
   3. AOF檔:

    上已已多次講過,RDB的快照定時dump機制無法保證良好的資料持久性。如果我們的應用確實非常關注此點,我們可以考慮使用Redis中的AOF機制。對Redis伺服器而言,其預設的機制是RDB,如果需要使用AOF,則需要修改設定檔中的下列項目:
    將appendonly no改為appendonly yes
    從現在起,Redis在每次接收資料修改的命令之後,都會將其追加到AOF檔中。在Redis下一次重新啟動時,需要載入AOF檔案中的資訊來建立最新的資料到記憶體中。
    
   4. AOF的設定:

    在Redis的設定檔中有三種同步方式,它們分別是:
    appendfsync always    
    appendfsync everysec  #每秒鐘同步一次,此策略為AOF的缺省策略。
    appendfsync no          #從不同步。高效率但是資料不會被持久化。
    
   5. 如何修補壞損的AOF文件:

    1). 將現有已壞損的AOF文件額外拷貝出來一份。
    2). 執行"redis-check-aof --fix "指令來修正壞損的AOF檔。
    3). 以修復後的AOF檔重新啟動Redis伺服器。
    
   6. Redis的資料備份:

    在Redis中我們可以透過copy的方式在線上備份正在運作的Redis資料檔案。這是因為RDB檔案一旦產生之後就不會再被修改。 Redis每次都是將最新的資料dump到一個暫存檔案中,之後在利用rename函數原子性的將暫存檔案改名為原有的資料檔名。因此我們可以說,在任意時刻copy資料檔案都是安全的和一致的。有鑑於此,我們就可以透過建立cron job的方式定時備份Redis的資料文件,並將備份檔案copy到安全的磁碟媒體中。  

以上就是Redis教學(十):持久化詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
將C#.NET應用程序部署到Azure/AWS:逐步指南將C#.NET應用程序部署到Azure/AWS:逐步指南Apr 23, 2025 am 12:06 AM

如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

C#.NET:強大的編程語言簡介C#.NET:強大的編程語言簡介Apr 22, 2025 am 12:04 AM

C#和.NET的結合為開發者提供了強大的編程環境。 1)C#支持多態性和異步編程,2).NET提供跨平台能力和並發處理機制,這使得它們在桌面、Web和移動應用開發中廣泛應用。

.NET框架與C#:解碼術語.NET框架與C#:解碼術語Apr 21, 2025 am 12:05 AM

.NETFramework是一個軟件框架,C#是一種編程語言。 1..NETFramework提供庫和服務,支持桌面、Web和移動應用開發。 2.C#設計用於.NETFramework,支持現代編程功能。 3..NETFramework通過CLR管理代碼執行,C#代碼編譯成IL後由CLR運行。 4.使用.NETFramework可快速開發應用,C#提供如LINQ的高級功能。 5.常見錯誤包括類型轉換和異步編程死鎖,調試需用VisualStudio工具。

揭開c#.net的神秘面紗:初學者的概述揭開c#.net的神秘面紗:初學者的概述Apr 20, 2025 am 12:11 AM

C#是一種由微軟開發的現代、面向對象的編程語言,.NET是微軟提供的開發框架。 C#結合了C 的性能和Java的簡潔性,適用於構建各種應用程序。 .NET框架支持多種語言,提供垃圾回收機制,簡化內存管理。

C#和.NET運行時:它們如何一起工作C#和.NET運行時:它們如何一起工作Apr 19, 2025 am 12:04 AM

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

C#.NET開發:入門的初學者指南C#.NET開發:入門的初學者指南Apr 18, 2025 am 12:17 AM

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

c#和.net:了解兩者之間的關係c#和.net:了解兩者之間的關係Apr 17, 2025 am 12:07 AM

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

c#.net的持續相關性:查看當前用法c#.net的持續相關性:查看當前用法Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具