1. 程式人生 > >redis 的兩種持久化方式及原理

redis 的兩種持久化方式及原理

Redis是一種高階key-value資料庫。它跟memcached類似,不過資料可以持久化,而且支持的資料型別很豐富。有字串,連結串列,集 合和有序集合。支援在伺服器端計算集合的並,交和補集(difference)等,還支援多種排序功能。所以Redis也可以被看成是一個數據結構伺服器。

    Redis的所有資料都是儲存在記憶體中,然後不定期的通過非同步方式儲存到磁碟上(這稱為“半持久化模式”);也可以把每一次資料變化都寫入到一個append only file(aof)裡面(這稱為“全持久化模式”)。

第一種方法filesnapshotting預設redis是會以快照的形式將資料持久化到磁碟的(一個二進位制檔案,dump.rdb,這個檔名字可以指定),在配置檔案中的格式是:save N M表示在N秒之內,redis至少發生M次修改則redis抓快照到磁碟。當然我們也可以手動執行save或者bgsave(非同步)做快照。

工作原理簡單介紹一下:當redis需要做持久化時,redis會fork一個子程序;子程序將資料寫到磁碟上一個臨時RDB檔案中;當子程序完成寫臨時檔案後,將原來的RDB替換掉,這樣的好處就是可以copy-on-write

還有一種持久化方法是Append-onlyfilesnapshotting方法在redis異常死掉時,最近的資料會丟失(丟失資料的多少視你save策略的配置),所以這是它最大的缺點,當業務量很大時,丟失的資料是很多的。Append-only方法可以做到全部資料不丟失,但redis的效能就要差些。AOF就可以做到全程持久化,只需要在配置檔案中開啟(預設是no),appendonly yes開啟AOF之後,redis每執行一個修改資料的命令,都會把它新增到aof檔案中,當redis重啟時,將會讀取AOF檔案進行“重放”以恢復到redis關閉前的最後時刻。

LOG Rewriting隨著修改資料的執行AOF檔案會越來越大,其中很多內容記錄某一個key的變化情況。因此redis有了一種比較有意思的特性:在後臺重建AOF檔案,而不會影響client端操作。在任何時候執行BGREWRITEAOF命令,都會把當前記憶體中最短序列的命令寫到磁碟,這些命令可以完全構建當前的資料情況,而不會存在多餘的變化情況(比如狀態變化,計數器變化等),縮小的AOF檔案的大小。所以當使用AOF時,redis推薦同時使用BGREWRITEAOF

AOF檔案重新整理的方式,有三種,參考配置引數appendfsync :appendfsync always每提交一個修改命令都呼叫fsync重新整理到AOF檔案,非常非常慢,但也非常安全;appendfsync everysec

每秒鐘都呼叫fsync重新整理到AOF檔案,很快,但可能會丟失一秒以內的資料;appendfsync no依靠OS進行重新整理,redis不主動重新整理AOF,這樣最快,但安全性就差。預設並推薦每秒重新整理,這樣在速度和安全上都做到了兼顧。

可能由於系統原因導致了AOF損壞,redis無法再載入這個AOF,可以按照下面步驟來修復:首先做一個AOF檔案的備份,複製到其他地方;修復原始AOF檔案,執行:$ redis-check-aof –fix ;可以通過diff –u命令來檢視修復前後文件不一致的地方;重啟redis服務。

LOG Rewrite的工作原理:同樣用到了copy-on-write:首先redis會fork一個子程序;子程序將最新的AOF寫入一個臨時檔案;父程序增量的把記憶體中的最新執行的修改寫入(這時仍寫入舊的AOF,rewrite如果失敗也是安全的);當子程序完成rewrite臨時檔案後,父程序會收到一個訊號,並把之前記憶體中增量的修改寫入臨時檔案末尾;這時redis將舊AOF檔案重新命名,臨時檔案重新命名,開始向新的AOF中寫入。

最後,為以防萬一(機器壞掉或磁碟壞掉),記得定期把使用 filesnapshotting 或 Append-only 生成的*rdb *.aof檔案備份到遠端機器上。我是用crontab每半小時SCP一次。我沒有使用redis的主從功能 ,因為半小時備份一次應該是可以了,而且我覺得有如果做主從有點浪費機器。這個最終還是看應用來定了。

相關推薦

redis持久化方式原理

Redis是一種高階key-value資料庫。它跟memcached類似,不過資料可以持久化,而且支持的資料型別很豐富。有字串,連結串列,集 合和有序集合。支援在伺服器端計算集合的並,交和補集(difference)等,還支援多種排序功能。所以Redis也可以被看成是一個

redis實戰--redis持久化方式

前言: 說到redis的持久化,大家可能就想到了RDB和AOF兩種方式; 下面就這兩種方案的意義以及兩種持久化方案的工作原理。 持久化的意義 redis的持久化意義在於故障恢復,資料恢復。 如果redis伺服器掛了,遇到了災難性的故障,redis

Redis持久化機制包括RBD和AOF,對於這持久化方式各有優勢

plain 同步數據 pen toc 默認 ocl 好的 dfs 操作系統 RDB機制的策略 RDB持久化是指在指定的時間間隔內將內存中的數據和操作通過快照的方式保存到redis bin目錄下的一個默認名為 dump.rdb的文件,可以通過配置設置自動的快照持久化的

Redis持久化方式

目錄 1.Redis的持久化: 2.Redis中持久化方式:  2.1 快照持久化 2.2 AOF持久化 2.3 快照持久化和AOF持久化的差別: 2.4手動發起快照持久化: 3.如何設定兩種持久化方式的相關資訊?  4.檢視並

深入Redis的RDB和AOF持久化方式以及AOF重寫機制的分析

快取伺服器有一個很重要的指標就是能否持久化,如果快取伺服器不支援持久化的話,一些相對重要的資料都不能存在快取伺服器中了,畢竟誰也不能保證服務百分百可用,一旦快取伺服器宕機,所有資料就都丟失了。 今天來分享一下Redis的持久化兩種持久化方式RDB和AOF。

(三)Redis持久化方案

根據 edit 接受 lang app append size aps pen Redis的持久化策略:2種 RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的數據進行快照並持久化到硬盤。RDB是Redis默認采用

ssh認證方式原理介紹

SSH是一種加密的網路傳輸協議,可在不安全的網路中為網路服務提供安全的傳輸環境。SSH通過在網路中建立安全隧道來實現SSH客戶端與伺服器之間的連線。雖然任何網路服務都可以通過SSH實現安全傳輸,SSH最常見的用途是遠端登入系統,人們通常利用SSH來傳輸命令列介面和遠端執行命令。ssh 協議互

java中集合刪除元素的常用方式新手易錯

java中集合刪除元素的兩種常用方式及新手易錯: 建立集合: [java]  view plain  copy ArrayList<String> aLi

Redisredis備份方式

Redis提供了兩種持久化選項,分別是RDB和AOF。 預設情況下60秒重新整理到disk一次[save 60 10000 當有1w條keys資料被改變時],Redis的資料集儲存在叫dump.rdb一個二進位制檔案,這種策略被稱為快照。 也可以手動呼叫Save或BGSA

單例模式的實現方式區別

 1:類載入時進行物件的例項化: public class SingletonA {   //SingletonA的唯一例項 private static SingletonA instance = new SingletonA();  //將建構函式私有,防止外界構造Sin

關於MySQL持久化方式區別總結

基本區別: InnoDB支援事務,MyISAM不支援,對於InnoDB每一條SQL語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務; InnoDB支援外來鍵,而MyISAM不支援。對一個包

redis持久化機制

兩種持久化機制是RDB和AOF機制  RDB持久化是指用資料集快照的方式記錄redis資料庫的所有鍵值對。  兩個命令:SAVE命令會阻塞主程序來完成寫檔案,BGSAVE命令會建立子程序來完成寫檔案,主程序會繼續處理命令。  優點:  1.只有一個檔案dump.rdb,方便持

include方式filter中的dispatcher解析

兩種include方式 我自己寫了一個original.jsp,另外有一個includedPage.jsp,我想在original.jsp中把includedPage.jsp引進來有兩種方式: 1、<%@ include file="includedPage.j

Redis學習一:Redis持久化機制

申明 本文章首發自本人公眾號:壹枝花算不算浪漫,如若轉載請標明來源! 感興趣的小夥伴可關注個人公眾號:壹枝花算不算浪漫 22.jpg 前言 Redis是基於記憶體來實現的NO SQL資料庫,但是我麼你都知道儲存在記憶體中的資料,只要伺服器關機,記憶體中的資料就會消失了。 為了避免記憶體中的資料丟失,Redi

圖解分析redis的RDB和AOF這持久化機制的工作原理

▌大綱 RDB和AOF兩種持久化機制的介紹 RDB持久化機制的優點 RDB持久化機制的缺點 AOF持久化機制的優點 AOF持久化機制的缺點 RDB和AOF到底該如何選擇   ▌RDB和AOF兩種持久化機制的介紹 1、

redis,mysql,memcache的區別與比較,redis資料儲存持久化方式

redis與mysql比較 區別:mysql中一箇中小型的網路資料庫,比oracle和sqlserver小, 但是併發能力遠超過acess這樣的桌面資料庫;redis是一個記憶體鍵值資料庫,支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫

20-02、圖解分析redis的RDB和AOF持久化機制的工作原理

分析redis的RDB和AOF兩種持久化機制的工作原理 我們已經知道對於一個企業級的redis架構來說,持久化是不可減少的。 企業級redis叢集架構:海量資料、高併發、高可用。 持久化主要是做災難恢復,資料恢復,也可以歸類到高可用的一個環節裡面去。 比如你redis整個掛了,然後red

分析RedisRDB和AOF持久化機制的工作原理優劣勢

一、RDB和AOF兩種持久化機制的介紹 RDB持久化機制,對redis中的資料執行週期性的持久化 AOF機制對每條寫入命令作為日誌,以append-only(追加)的模式寫入一個日誌檔案中,在redis重啟的時候,可以通過回放AOF日誌中的寫入指令來重新構建整個資料集 如果我們想要redis僅僅作

建立執行緒的方式原理

建立執行緒的第一種方式: 1.  定義類繼承Thread類。 2.  重寫run()。 3.  建立執行緒物件。 4.  呼叫start()啟動執行緒。 class Thread {     priv

Oozie與Coordinator調度講解系統時區配置與定時觸發配置方式

-- track eno star es2017 alt coo 之前 res 1:修改本地linux時區 查看時區 - 號代表西 + 號 代表東 北京時間是東八區 設置時區的配置文件所在位置 1 cd /usr/share/zoneinfo/