• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • redis的兩種持久化的機制,你真的了解么?

    redis提供了兩種持久化的機制 RDB和AOF機制

    RDB(redis Database):RDB保存某一個時間點之前的快照數據。

    AOF(Append-Only File):指所有的命令行記錄以redis命令請求協議的格式完全持久化存儲保存為AOF文件

    混合持久化(4.0版本以后):指進行AOF重寫時子進程將當前時間點的數據快照保存為RDB文件格式,而后將父進程累計命令保存為AOF格式。

    RDB快照有兩種觸發方式

    1:為通過配置參數,如下:

    通過一定的時間周日內看,命令執行的個數,超過閾值立即執行快照生成

    save 900 1  //900秒內有1次更新
    save 300 10 //30秒內有10次更新
    save 60 10000  //60秒內有10000次更新

    2:手動執行bgsave/save,手動觸發生成快照 直接執行save會阻塞主進程,bgsave的話會fork一個子進程完成快照

    但是redis在發生RDB持久化的過程中有幾個問題需要思考

    1.RDB快照過程中Redis是否會停止對外服務

    2.如果不回停止服務,那如何處理新的請求

    接下來我們看redis的

    RDB持久化的具體過程

    file 1:主進程會fork一個子進程

    2:子進程會共享一部分主進程的數據空間,并且把共享的數據置為read-only的狀態,在這個過程中,子進程以rdb的協議來實行持久化

    3:在持久化的過程中是避免不了有新的數據寫入的,因為我們有一部分的數據是共享的,兩個進程同時擁有一塊數據,肯定會導致數據不一致的問題, 但是依賴于操作系統的fork機制,在修改的時候一定是修改部分內存頁的數據,這個時候會觸發對應內存頁的copyonwrite的操作,不會影響子進程完 成持久化,持久化結束后,主進程會對子進程進行回收

    RDB的文件格式 file

    • redis的rdb文件是一個非常緊湊的格式

    • 開頭的REDIS是固定的一個格式,redis在讀取持久化文件的時候發現不是以REDIS開頭的會報錯

    • 0006是RDB_VERSION當前RDB協議的版本

    • AUX_FIELD_KEY_VALUE_PAIRS是一些輔助的字段

    • data則為保存的數據,數據首先會選擇redis_db,db選擇之后就是鍵值對的數據,對應的鍵值對又會分為設置過過期時間和未設置過期時間的數據

    RDB持久化的優點

    1:二進制的數據非常緊湊,數據的恢復速度非常快

    2:在持久化的過程中,性能最大化,fork子進程來完成寫操作,讓主進程繼續處理命令,使用單獨子進程來進行持久化,保證了redis的高性能

    RDB持久化的缺點

    1:數據安全性低,RDB是間隔一段時間進行持久化,如果持久化之間redis發生了故障,會發生數據丟失

    2:linux fork之后,kernel把父進程中所有的內存頁權限都設置readonly,然后子進程的地址空間指向父進程。當父子進程都只讀內存時,相安無事。當其中某個進程寫內存時,CPU硬件檢測到內存頁是read-only的,于是觸發頁異常終端(page-fault),陷入kernal的一個中斷例程。中斷例程中,kernel的copyonwrite機制就會把觸發的異常頁復制一份,于是父子進程各自持有獨立的一份。如果這個時候有大量的寫入操作,會產生大量的分頁錯誤(頁異常中斷page-fault ),這樣就得耗費不少性能在復制上。

    AOF持久化執行流程

    通過appendonly yes開啟

    file

    Redis使用單線程響應命令,如果每次AOF文件命令都追加到磁盤,會極大的影響處理性能,所以Redis先寫入aof緩沖區,根據用戶配置的同步磁盤策略寫入aof文件中,可以通過appendfsync參數配置同步策略:含義如下

    appendfsync always #表示每次更新操作后手動調用fsync()將數據寫入到磁盤
    appendfsync everysec #表示每秒同步一次(折中方案,默認值)
    appendfsync no  #表述等操作系統進行數據緩存同步到磁盤(快速響應客戶端,不對AOF做數據同步,同步文件由操作系統負責,通常同步周期最長30S)

    AOF重寫機制

    隨著命令得不斷寫入AOF,文件會越來越大,為了解決這個問題Redis引入了AOF重寫機制壓縮文件體積。AOF文件重寫是把Redis進程內的數據轉化為寫命令同步到新AOF文件的過程,AOF重寫機制可以通過手動觸發了自動觸發

    手動觸發:bgreweuteaof命令

    自動觸發:

    auto-aof-rewrite-percentage 100 #表示當前AOF文件空間和上一次重寫后AOF文件空間的比值(100%)
    auto-aof-rewrite-min-size 64mb #代表AOF重寫時文件最小體積

    AOF的優點:數據安全,AOF持久化可以配置appendfsync屬性,有always,每進行一次命令操作就記錄到aof文件中一次。

    AOF的缺點:數據集比較大的時候,比RDB啟動效率低

    混合持久化

    可以通過aof-use-rdb-preamble yes開啟

    加載時,首先會識別AOF文件是否以REDIS字符串開頭,如果是,就按照RDB格式加載,加載完RDB后繼續按AOF格式加載剩余部分。 混合式持久化方案兼顧了RDB的速度,和AOF的安全性

    關注我的技術公眾號,每周都有優質技術文章推送。 微信掃一掃下方二維碼即可關注: file

    版權聲明:本文為weixin_36469852原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_36469852/article/details/109111687

    智能推薦

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    猜你喜歡

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    19.vue中封裝echarts組件

    19.vue中封裝echarts組件 1.效果圖 2.echarts組件 3.使用組件 按照組件格式整理好數據格式 傳入組件 home.vue 4.接口返回數據格式...

    精品国产乱码久久久久久蜜桃不卡