1. 程式人生 > >玩轉redis持久化,阿里架構師給你來一篇方案介紹

玩轉redis持久化,阿里架構師給你來一篇方案介紹

一、基本介紹

本次演示使用的redis版本是3.2.100,作業系統是win10。

redis支援兩種持久化方案,RDB和AOF,前者是預設開啟的,後者需要手動開啟。我們通過配置檔案可以驗證這一點,

RDB預設開啟

save 900 1
save 300 10
save 60 10000

這三條配置是RDS觸發快照的條件,它們的意思分別是:

  1. 900秒內如果有一條寫入,則產生快照
  2. 300秒內如果有1000次寫入,則產生快照
  3. 60秒內如果有10000次寫入,則產生快照

當然,觸發rdb快照的條件不止這些,下面會講到。

AOF預設關閉

appendonly no

二、RDB介紹

RDB的方案是當滿足觸發條件是,將記憶體中的資料以二進位制的方式寫入磁碟儲存,預設儲存的檔案叫dump.rdb(可以改),當redis重啟時,會讀取該檔案進行資料恢復。

檢視快照檔案的資訊

127.0.0.1:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"
127.0.0.1:6379> config get dir
1) "dir"
2) "C:\\redis-6379"
127.0.0.1:6379>

觸發RDB快照條件

除了上面提到的在指定時間內,指定寫次數觸發之外,下面幾種情況也會觸發redis執行RDB快照,

  1. 手動執行save(同步阻塞)或者bgsave(非同步阻塞)命令
  2. 執行flushall命令
  3. redis退出,執行shutdown命令

下面拿第一種情況演示下,這裡會用到info Persistence命令,用來檢視持久化資訊。

127.0.0.1:6379> info persistence
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1561595205
...省略其它
127.0.0.1:6379> save
OK
127.0.0.1:6379> info persistence
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1561595940
...省略其它
127.0.0.1:6379>

注意看rdb_last_save_time欄位,說明save命令觸發了持久化。

三、AOF介紹

為了演示AOF,我們需要手動把AOF開關開啟,然後重啟redis。

AOF將Redis執行的每一條寫命令追加到磁碟檔案(appendonly.aof)中,如果打開了AOF,redis啟動時候優先選擇從AOF檔案恢復資料。

相關配置

除了開關,和AOF相關的配置還有以下幾個:

appendfilename "appendonly.aof"   #資料庫檔名
# appendfsync always    #每個命令都追加寫入
appendfsync everysec    #每秒寫1次
# appendfsync no        #寫入工作交給作業系統,由作業系統判斷緩衝區大小,統一寫入到aof

no-appendfsync-on-rewrite  yes:   #正在匯出rdb快照的過程中,是否停止同步aof
auto-aof-rewrite-percentage 100   #aof檔案大小比起上次重寫時的大小,增長率100%時,重寫
auto-aof-rewrite-min-size 64mb    #aof檔案,至少超過64M時,才重寫

重寫機制

通過前面講述的AOF的過程,聰明的你可能會想到一個問題,AOF不斷的追加命令到檔案,那檔案豈不是越來越大,時間長了對磁碟空間也是負擔啊。

你都想到了,redis的作者會想不到嗎?redis引入了重寫機制來解決這個問題。上面配置的最後兩條其實就是重寫的觸發條件,說白了意思就是:

當AOF檔案大小是上次rewrite後大小的一倍且檔案大於64M時觸發

除了上面的條件觸發,AOF也支援手動觸發(bgrewriteaof命令)下面用這個命令演示重寫

λ redis-cli.exe
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
127.0.0.1:6379>

啟動日誌:

[18268] 27 Jun 09:23:41.282 # Server started, Redis version 3.2.100
[18268] 27 Jun 09:23:41.282 * The server is now ready to accept connections on port 6379
[18268] 27 Jun 09:24:03.236 * Background append only file rewriting started by pid 18740
[18268] 27 Jun 09:24:03.388 * AOF rewrite child asks to stop sending diffs.
[18268] 27 Jun 09:24:03.488 # fork operation complete
[18268] 27 Jun 09:24:03.489 * Background AOF rewrite terminated with success
[18268] 27 Jun 09:24:03.491 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB)
[18268] 27 Jun 09:24:03.496 * Background AOF rewrite finished successfully

四、總結

  1. 如果使用持久化,建議RDB和AOF都開啟,雙重保障。AOF會優先執行,如果執行失敗還有RDB
  2. RDB適合大規模資料恢復,但是完整性不如AOF,因為RDB可能在最後一次備份時宕機了
  3. RDB相對AOF比較佔用記憶體

寫在最後

相關推薦

redis持久化阿里架構方案介紹

一、基本介紹 本次演示使用的redis版本是3.2.100,作業系統是win10。 redis支援兩種持久化方案,RDB和AOF

高併發分散式叢集效能優化軟體架構阿里架構:教如何學習併發程式設計進入BAT視訊下載

阿里架構師:教你如何學習併發程式設計進入BAT視訊下載 39套Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設計,第三方支付,web安全,效能調優,設計模式,資料結構,併發程式設計

阿里架構一路走的經驗不做專案跳槽如何拿高薪

進一個公司,肯定會問你的專案經驗吧! 問題;談談你做的xx專案吧! 分析:考官通過看你的簡歷或者你的介紹來了解你所做的專案,那麼考官肯定想更詳細的瞭解您的專案,看是不是與你的簡歷寫的專案經驗一致。也就是考核你是否具有真實的專案經驗。一般來說,在你的簡歷至少有一個重點專案,放在簡歷專案經驗欄的

2018年最全23個阿里架構面試題(總結

想要進入大型企業的話,首先要有豐富的工作經驗和專案經驗,其次就是有好的表達能力,能說會道。 從程式設計師成長為架構師,需要幾年?從架構師升任CTO,又需要幾年?成長沒有一蹴而就,雞湯喝再多,終究是要回到現實,腳踏實地。 咱們接下來說說一些架構師面試常見的面試題: 1、String,Str

深度短文:阿里架構tomcat設定skip scanning JARs for TLD

最近做一個java class 加密的專案,使用tomcat載入時出現, org.apache.jasper.servlet.TldScanner : No TLD files were found in [jar:filexxxx 開始認為是tomcat的classloader問

十年阿里架構如何閱讀原始碼

閱讀Java原始碼的前提條件: 1、技術基礎 在閱讀原始碼之前,我們要有一定程度的技術基礎的支援。 假如你從來都沒有學過Java,也沒有其它程式語言的基礎,上來就啃《Core Java》,那樣是很難有收穫的,尤其是《深入Java虛擬機器》這類書,或許別人覺得好,但是

阿里架構告訴最新Java架構學習路線圖

1、Java架構師是什麼? 要想往Java架構師的方向發展首先要知道Java架構師是什麼? Java架構師是一個既需要掌控整體又需要洞悉區域性瓶頸並依據具體的業務場景給出解決方案的團隊領導型人物。一個Java架構師得需要足夠的想像力,能把各種目標需求進行不同維度的擴充套件

阿里架構如何使用ThreadLocal及原理分析

  內容導航 什麼是ThreadLocal ThreadLocal的使用 分析ThreadLoca

編寫的程式高效、優雅嗎?阿里架構編寫高效優雅Java程式

  面向物件 構造器引數太多怎麼辦? 用 builder 模式,用在 1、5 個或者 5 個以上的成員變數

關於一致性hash,這可能是全網最形象生動最容易理解的文件,想做架構了解一下

問題提出 一致性hash是什麼?假設有4臺快取伺服器N0,N1,N2,N3,現在有資料OBJECT1,OBJECT2,OBJECT

做好互動音效讓遊戲音效眼前

在遊戲中我們都知道背景音樂≠音效,而通過遊戲音效最能給玩家單來真實感,遊戲音效製作中互動最為重要,只有做好了遊戲音效的互動,才能讓音效更出色。         在遊戲音效製作過程中,要關注遊戲中所會遇到的一系列問題,例如按鈕的聲音,獲得金

架構分布式鎖

src 效率 獲取鎖 當我 mysql 代碼 red 目錄 在線   大多數互聯網系統都是分布式部署的,分布式部署確實能帶來性能和效率上的提升,但為此,我們就需要多解決一個分布式環境下,數據一致性的問題。   當某個資源在多系統之間,具有共享性的時候,為了保證大家訪問這個資

阿里架構十年經驗分享還在迷茫嗎?

第一階段:三年 我認為三年對於程式設計師來說是第一個門檻,這個階段將會淘汰掉一批不適合寫程式碼的人。這一階段,我們走出校園,邁入社會,成為一名程式設計師,正式從書本上的內容邁向真正的企業級開發。我們知道如何團隊協作、如何使用專案管理工具、專案版本如何控制、我們寫的程式碼如何測試如何在線上執行等等

阿里架構八年Java開發的學習經歷自述希望新人少走彎路

做JAVA有8年的時間了,我從高一就開始接觸JAVA,家裡親戚有從事這方面工作經常給分享這方面的職業發展,自己對程式設計也是非常感興趣,今天講述一下我是怎麼學習JAVA的,此文章不可以太短,顯得沒有誠意,也不可以太長,那樣很多人看不下去,精簡瞭如下文字: 剛開始學習JAVA的時候是看書,一

從普通JAVA程式設計師到阿里架構他用了六年

工作年限:8 年服務公司:4 家(含四大門戶中的兩家)最近職業:Java 架構師職場關鍵詞:社交平臺、高併發系統架構設計、技術團隊管理、多款從零到一的產品城市! 六年間,這位職人呆過四大門戶中的兩家,完成了工程師到架構師的蛻變。經手多款從零到一產品的開發和增長,也經歷國內最

一個阿里架構十年的從業總結:比起掉髮我更怕掉隊(文末福利分享)

驀然回首,從畢業到現在做後臺開發已經十年了,這十年中我獲得了很多,技術能力、培訓、出國、大公司的經歷,還有很多志同道合的朋友。但再仔細一想,這十年碼農路上我至少浪費了五年時間,這五年可以足夠讓自己成長為一個優秀的程式設計師,可惜我錯過了,我用這五年時間和很多程式設計師一樣在困

做碼農八年苦研技術終走向阿里架構的分享

進入Java這個行業也有8年了,通過8年的努力,現在在阿里任職一名高階架構師。下面我想跟大家分享一下。我認為,隨著你工作年限的增長、對生活對生命認識的深入,應當不斷思考三個問題: 1、我到底適不適合當一名程式設計師? 2、我到底應不應該一輩子以程式設計師為職業? 3、我對程式設計到底持有

多研究些架構少談些框架——阿里架構的筆記

引言:微服務現在辣麼火,業界流行的對比的卻都是所謂的Monolithic單體應用,而大量的系統在十幾年前都是已經是分散式系統了,那麼微服務作為新的理念和原來的分散式系統,或者說SOA(面向服務架構)是什麼區別呢? 論微服務架構的核心概念 微服務架構和SOA區別

阿里架構解析作為剛入行的Java工程師要達到月薪2W需要幾年?

Java工程師月入過萬不是什麼難事,那麼剛入行的Java工程師多久能實現月薪2w,你和月薪2w之間都差了哪些技能呢? 本來想寫月薪1W,但是看到bat在社招的offer,估計說成月薪過萬會被說成無知,的確現在剛畢業的大學生拿到10-20W年薪真不是難事(當然不同的城市,不同

阿里架構講述網際網路分散式系統架構設計中的“高併發”

一、什麼是高併發 高併發(High Concurrency)是網際網路分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。 高併發相關常用的一些指標有響應時間(Response Time),吞吐量(Throughput),每秒