1. 程式人生 > >一文了解:Redis的AOF持久化

一文了解:Redis的AOF持久化

Redis的AOF持久化

每當Redis-Server接收到寫資料時,就把命令以文字形式追加到AOF檔案裡,當重啟Redis服務時,AOF檔案裡的命令會被重新執行一次,重新恢復資料。當AOF過大時將重寫AOF檔案。

工作原理

> lpush list 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lpop list
"4"
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"

appendonly.aof檔案中

*2
$6
SELECT
$1
0
*6
$5
lpush
$4
list
$1
1
$1
2
$1
3
$1
4
*2
$4
lpop
$4
list

可以看到上面的示例中寫操作有lpush和lpop命令,在AOF檔案中存在lpush和lpop。SELECT命令為AOF程式自動加上的選擇資料庫。

AOF命令寫入的內容為文字協議格式,如:命令lpush list 1 2 3 4 的文字形式為"*6\r\n$5\r\nlpushr\n$4r\nlist\r\n$1\r\n1$1\r\n2$1\r\n3$1\r\n4\r\n"。將文字內容追加到aof_buf(緩衝區)中,AOF緩衝區根據相應的策略同步寫入AOF檔案中,當AOF檔案越來越大時,將AOF檔案重寫。

啟動AOF持久化

在redis.conf檔案中

appendonly no  #寫成yes,開啟AOF持久化

AOF寫入頻率

# appendfsync always    
appendfsync everysec   # 預設
# appendfsync no
  1. alaws:總是同步到AOF檔案,每一個命令都寫入,安全,速度慢
  2. everysec:每秒寫入一次,安全性好,最多丟失1秒鐘的資料
  3. no:寫入AOF檔案工作交給作業系統,由作業系統寫入AOF檔案,安全性一般

檔案

aof檔案目錄通過RDB檔案目錄,他們共享同一個目錄

dir ./

appendfilename "appendonly.aof"

通過config set dir {newDir} 動態修改dir配置

通過config set dbfilename {appendfilename} 動態修改AOF檔名稱

重寫

AOF檔案過大時,Redis將fork()一個子程序對記憶體資料進行比那裡逆化成Redis命令,序列化文字格式後寫入到新的AOF檔案中。然後將重寫時發生的增量AOF檔案追加到新的AOF檔案中,最後替換舊的AOF檔案。

自動重寫

auto-aof-rewrite-percentage 100  # 比上次重寫時檔案增大了100%就重寫AOF檔案
auto-aof-rewrite-min-size 64mb   # AOF檔案至少超過為64M時重寫AOF檔案

自動重寫必須滿足:當前AOF檔案大小 > auto-aof-rewrite-min-size &&(當前檔案AOF檔案大小減去上次重寫時AOF檔案大小)除以 上次重寫時AOF檔案大小 = auto-aof-rewrite-percentage

手動重寫

> bgrewriteaof
Background append only file rewriting started

優缺點

優點

  1. 比RDB檔案可靠,everysec模式下只丟1秒資料。
  2. AOF檔案為純文字檔案。檔案協議格式容易恢復成Redis命令。
  3. AOF檔案太大會進行自動重寫。

缺點

  1. 同等資料下,比RDB檔案大。
  2. 同步過程中Redis主程序會被阻塞,everysec是個折中方案。

資料恢復

Redis讀取AOF檔案資料還原過程

  1. 建立一個不帶網路的客戶端
  2. 讀取AOF檔案內容,還原成命令
  3. 將命令在1中的客戶端執行
  4. 重複2,3的過程

結語

本人深知水平有限,歡迎指正本文錯誤之處。


相關推薦

Redis的RDB持久化

一文了解:Redis的RDB持久化 Redis是記憶體資料庫,為了保證資料不在故障後丟失,Redis需要將資料持久化到硬碟上。 Redis持久化有兩種方式:一種是快照,全量備份。一種是AOF方式,連續增量方式。 RDB RDB持久化就是把資料生成快照儲存到硬碟的過程。每N分鐘資料傳送了M次寫操作之後,從記憶體

Redis的AOF持久化

Redis的AOF持久化 每當Redis-Server接收到寫資料時,就把命令以文字形式追加到AOF檔案裡,當重啟Redis服務時,AOF檔案裡的命令會被重新執行一次,重新恢復資料。當AOF過大時將重寫AOF檔案。 工作原理 > lpush list 1 2 3 4 (integer) 4 127.0.

Redis基礎型別

一文了解:Redis基礎型別 Redis特點 開源的,BSD許可高階的key-value儲存系統 可以用來儲存字串,雜湊結構,連結串列,集合 安裝 windows:https://github.com/microsoftarchive/redis/releases mac\linux:http://www.r

Redis事務

Redis事務 事務提供了一種"將多個命令打包,一次性提交併按順序執行"的機制,提交後在事務執行中不會中斷。只有在執行完所有命令後才會繼續執行來自其他客戶的訊息。 Redis中的使用 Redis通過multi,exec,discard,watch實現事務功能。 multi:開始事務 exec:提交事務並執行

Redis過期鍵刪除策略

Redis過期鍵刪除策略 Redis中所有的鍵都可以設定過期策略,就像是所有的鍵都可以上"生死簿",上了生死簿的鍵到時間後閻王就會叉掉這個鍵。同一時間大量的鍵過期,閻王就會忙不過來。同時因為Redis是單執行緒的,導致閻王的處理時間會變得很長,而且處理繁忙,Redis就會出現卡頓現象。 R

Redis主從複製

Redis主從複製 主從複製 主從複製,將一臺Redis伺服器的資料,複製到其他Redis伺服器。前者稱為主(master)節點,後者稱為從(slave)節點 。 在預設的情況下,Redis都是主節點,每個從節點只能有一個主節點,一個主節點可以有多個從節點。複製的資料只能從主節點複製到從節點。 配置方式 在

推薦 AI時代的資料風險(後真相時代、演算法囚徒和權利讓渡)

當今,在基於資料的個性化推薦演算法機制滿足了人們獵奇心、窺探欲、表演慾,讓人們在網路中尋找到共鳴

夯實Java基礎系列4final關鍵字的特性、使用方法,以及實現原理

目錄 final使用 final變數 final修飾基本資料型別變數和引用 final類 final關鍵字的知識點 final關鍵字的最佳實踐 final的用法 關於空白final final記憶體分配 使用final修飾方法會提高速度和效率嗎 使用final修飾變數會讓變數的值不能被改變嗎; 如何保

[翻譯自官方]什麼是RDB和AOF? Redis持久化!

  ​概述 本文提供Redis持久化技術說明,  建議所有Redis使用者閱讀. 如果您想更深入瞭解Redis永續性原理機制和底層永續性保證, 請參考文章 揭祕Redis持久化: http://antirez.com/post/redis-persistence-demystifie

sun.misc.Unsafe

類型轉換 鏈接 str DC arch lang 生態 rip export Java語言和JVM平臺已經度過了20歲的生日。它最初起源於機頂盒、移動設備和Java-Card,同時也應用在了各種服務器系統中,Java已成為物聯網(Internet of Things)的通用

網絡安全數字化轉型,Gartner的這些數字驚呆你!

紅芯企業瀏覽器 數字化轉型提起網絡安全立馬會想到Facebook泄密門受影響的用戶已達到8700 萬事實甚至比這個數字還要多得多連媒體都在感嘆網絡安全界真是“多事之秋”啊! 而Gartner近期發布的全球網絡安全產業規模發展及趨勢預測,那些關於網安行業的數字更是驚人。 “數字安全大家族”來啦 網絡安全問題由來

安卓APP逆向分析與保護機制

dex 也不會 時也 也有 包含 啟動 RM 操作 混亂 “知物由學”是網易雲易盾打造的一個品牌欄目,詞語出自漢·王充《論衡·實知》。人,能力有高下之分,學習才知道事物的道理,而後才有智慧,不去求問就不會知道。“知物由學”希望通過一篇篇技術幹貨、趨勢解讀、人物思考和沈澱給你

c/c++、java、JavaScript、php、Python的用途

BE 算法實現 分布式 底層 web服務器 物聯網 文檔 性能 爆發 編程語言是用來定義計算機程序的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令。一種計算機語言讓程序員能夠準確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當采取的行動。 C和C+

“Service Mesh(服務網格)”的歷史與現在

對於大多數人來說,“Service Mesh(服務網格)”仍然是一個新概念,因此,談論它的“歷史”可能看起來有點滑稽。但事實上,早在2010年初,在一些大網路規模的公司中,服務網格的概念就隱約開始逐步形成了。因此,服務網格確實有一段歷史值得去探索、去理解。  

強化學習

雖然是週末,也保持充電,今天來看看強化學習,不過不是要用它來玩遊戲,而是覺得它在製造業,庫存,電商,廣告,推薦,金融,醫療等與我們生活息息相關的領域也有很好的應用,當然要了解一下了。 本文結構: 定義 和監督式學習

,大資料就業薪資怎麼樣?

大資料行業薪資高,是顯而易見的,於此同時,大資料崗位薪資的範圍也是比較寬的,這關係到個人的學歷學科背景,技術掌握情況,當然各個地區的薪資肯定是不同的。本文從三個角度來分析薪資。先從科多大資料的一個大資料開發培訓班來了解初級大資料崗位的薪資情況,對於很多初入大資料行業的人來說,這個比較有參考性,其次從

前端、後端、全棧都學什麼?薪資前景如何?

隨著資訊產業的迅猛發展,IT行業人才需求量也在逐年擴大。 據國內權威資料統計,未來五年,我國資訊化人才總需求量高達1500萬—2000萬人。其中“軟體開發”、“網路工程”等人才的缺口最為突出。以軟體開發為例,我國軟體人才需求以每年遞增20%的速度增長,每年新增需求近百萬。 這也是目前很多非科

Android中路由(Router)的實現

Router 對於一個功能越來越複雜的APP來說,路由對於程式碼的解耦、頁面靈活跳轉配置、頁面攔截功能提供了很好的支援。下面我將分析業界比較出名的兩個路由框架WMRouter和ARouter的原始碼,瞭解他們的實現原理。 這兩個框架的實現核心原理是差不多的: 通過註解標註路由資訊,在編譯期動態掃描路由資訊

JVM全部垃圾回收器,從Serial到ZGC

應用 base garbage 最大收益 監控 fill 前沿 mage 記錄 《對象搜索算法與回收算法》介紹了垃圾回收的基礎算法,相當於垃圾回收的方法論。接下來就詳細看看垃圾回收的具體實現。 上文提到過現代的商用虛擬機的都是采用分代收集的,不同的區域用不同的收集器。常用的

自然語言處理神經史

摘要:越來越火的NLP到底經歷了什麼?本文擴充套件了HermanKamper和我在2018年深度學習Indaba組織的自然語言處理前沿課程。整個課程的幻燈片都可以在這裡找到,這篇文章將主要討論NLP中基於神經網路方法的近期進展。 免責