国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis 重寫 AOF 日志期間,主進程可以正常處理命令嗎?

這篇具有很好參考價值的文章主要介紹了Redis 重寫 AOF 日志期間,主進程可以正常處理命令嗎?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

重寫 AOF 日志的過程是怎樣的?

Redis 的重寫 AOF 過程是由后臺子進程 bgrewriteaof 來完成的,這么做有以下兩個好處。

  • 子進程進行 AOF 重寫期間,主進程可以繼續(xù)處理命令請求,從而避免阻塞主進程
  • 子進程帶有主進程的數(shù)據(jù)副本。這里使用子進程而不是線程,是因為如果使用線程,多線程之間會共享內(nèi)存,那么在修改共享內(nèi)存數(shù)據(jù)的時候,需要通過加鎖來保證數(shù)據(jù)的安全,而這樣就會降低性能。而使用子進程,創(chuàng)建子進程時,父子進程是共享內(nèi)存數(shù)據(jù)的,不過這個共享的內(nèi)存只能以只讀的方式,而當父子進程任意一方修改了該共享內(nèi)存,就會發(fā)生「寫時復制」,于是父子進程就有了獨立的數(shù)據(jù)副本,就不用加鎖來保證數(shù)據(jù)安全

觸發(fā)重寫機制后,主進程就會創(chuàng)建重寫 AOF 的子進程,此時父子進程共享物理內(nèi)存,重寫子進程只會對這個內(nèi)存進行只讀,重寫 AOF 子進程會讀取數(shù)據(jù)庫里的所有數(shù)據(jù),并逐一把內(nèi)存數(shù)據(jù)的鍵值對轉(zhuǎn)換成一條命令,再將命令記錄到重寫日志(新的 AOF 文件)。

子進程是怎樣擁有和主進程一樣的數(shù)據(jù)副本的呢?

主進程在通過 fork 系統(tǒng)調(diào)用生成 bgrewriteaof 子進程時,操作系統(tǒng)會把主進程的「頁表」復制一份給子進程,這個頁表記錄著虛擬地址和物理地址映射關系,而不會復制物理內(nèi)存。簡單來說,兩者的虛擬空間不同,但其對應的物理空間是同一個。

Redis 重寫 AOF 日志期間,主進程可以正常處理命令嗎?,Redis,redis

這樣一來,子進程就共享了父進程的物理內(nèi)存數(shù)據(jù),這樣能夠節(jié)約物理內(nèi)存資源,頁表對應的頁表項的屬性會標記該物理內(nèi)存的權限為只讀。

不過,當父進程或者子進程在向這個內(nèi)存發(fā)起寫操作時,CPU 就會觸發(fā)寫保護中斷,這個寫保護中斷是由于違反權限導致的,然后操作系統(tǒng)會在「寫保護中斷處理函數(shù)」里進行物理內(nèi)存的復制,并重新設置其內(nèi)存映射關系,將父子進程的內(nèi)存讀寫權限設置為可讀寫,最后才會對內(nèi)存進行寫操作,這個過程被稱為「寫時復制」。

Redis 重寫 AOF 日志期間,主進程可以正常處理命令嗎?,Redis,redis

注意,這里只會復制主進程修改的物理內(nèi)存數(shù)據(jù),沒修改的物理內(nèi)存還是與子進程共享的。

但是在重寫過程中,主進程依然可以正常處理命令。那么問題來了,重寫 AOF 日志過程中,如果主進程修改了已經(jīng)存在的 key-value,就會觸發(fā)「寫時復制」,此時這個 key-value 數(shù)據(jù)在子進程的內(nèi)存數(shù)據(jù)就和在主進程的內(nèi)存數(shù)據(jù)不一致了。

為了解決這種數(shù)據(jù)不一致的問題,Redis 設置了一個 AOF 重寫緩沖區(qū),這個緩沖區(qū)在創(chuàng)建 bgrewriteaof 子進程之后開始使用。

在重寫 AOF 期間,當 Redis 執(zhí)行完一個寫命令之后,它會同時將這個寫命令寫入到 「AOF 緩沖區(qū)」和 「AOF 重寫緩沖區(qū)」。

Redis 重寫 AOF 日志期間,主進程可以正常處理命令嗎?,Redis,redis

也就是說,在 bgrewriteaof 子進程執(zhí)行 AOF 重寫期間,主進程需要執(zhí)行以下三個工作。

  • 執(zhí)行客戶端發(fā)來的命令
  • 將執(zhí)行后的寫命令追加到 「AOF 緩沖區(qū)」,用于后續(xù)通過 write() 系統(tǒng)調(diào)用,寫入內(nèi)核的緩沖區(qū),再由內(nèi)核決定在合適的時機將數(shù)據(jù)寫入磁盤
  • 將執(zhí)行后的寫命令追加到 「AOF 重寫緩沖區(qū)」

當子進程完成 AOF 重寫工作(掃描數(shù)據(jù)庫中的所有數(shù)據(jù),逐一把內(nèi)存數(shù)據(jù)的鍵值對轉(zhuǎn)換成一條命令,再將命令記錄到重寫日志)后,會向主進程發(fā)送一條信號(信號是進程間通訊的一種方式,且是異步的)。

主進程收到該信號后,會調(diào)用一個信號處理函數(shù),該函數(shù)主要做以下工作。

  1. 將 AOF 重寫緩沖區(qū)中的所有內(nèi)容追加到新的 AOF 文件中,使得新舊兩個 AOF 文件所保存的數(shù)據(jù)狀態(tài)一致
  2. 對新的 AOF 的文件進行改名,覆蓋現(xiàn)有的 AOF 文件

信號函數(shù)執(zhí)行完后,主進程就可以繼續(xù)像往常一樣處理命令了。文章來源地址http://www.zghlxwxcb.cn/news/detail-671514.html

到了這里,關于Redis 重寫 AOF 日志期間,主進程可以正常處理命令嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 圖解Redis,談談Redis的持久化,RDB快照與AOF日志
  • 【Redis】AOF 源碼

    【Redis】AOF 源碼

    在上篇, 我們已經(jīng)從使用 / 機制 / AOF 過程中涉及的輔助功能等方面簡單了解了 Redis AOF。 這篇將從源碼的形式, 進行深入的了解。 Redis 的 AOF 功能概括起來就 2 個功能 AOF 同步: 將客戶端發(fā)送的變更命令, 保存到 AOF 文件中 AOF 重寫: 隨著 Redis 的運行, AOF 文件會不斷變大, 在文件達

    2024年01月19日
    瀏覽(50)
  • 【Redis】——AOF持久化

    【Redis】——AOF持久化

    AOF日志是redis為數(shù)據(jù)的持久化提供了的一個技術,日志里面記錄著執(zhí)行redis寫命令。 每當r edis執(zhí)行一條寫命令的時候,就會將該命令記錄 到AOF日志當中 。 當redis啟動的時候,可以加載AOF日志中的所有指令,并執(zhí)行這些指令恢復所有的數(shù)據(jù)。 在 Redis 中 AOF 持久化功能默認是不開

    2024年02月13日
    瀏覽(30)
  • Redis 持久化——AOF

    Redis 持久化——AOF

    使用 RDB 持久化有一個風險,它可能會造成最新數(shù)據(jù)丟失的風險。因為 RDB 的持久化有一定的時間間隔,在這個時間段內(nèi)如果 Redis 服務意外終止的話,就會造成最新的數(shù)據(jù)全部丟失。 可能會操作 Redis 服務意外終止的條件: 安裝 Redis 的機器停止運行,藍屏或者系統(tǒng)崩潰; 安裝

    2024年01月22日
    瀏覽(19)
  • Redis- AOF刷盤策略

    在Redis中, appendfsync everysec 是一個與持久化相關的配置選項,它屬于 Redis 的 AOF(Append Only File)持久化策略的一部分。 Redis支持兩種主要的數(shù)據(jù)持久化方式:RDB(快照)和AOF(追加只文件)。AOF持久化通過記錄每個寫操作到一個日志文件來工作,以此在Redis重啟后重放這些操

    2024年01月21日
    瀏覽(14)
  • 【Redis】Redis持久化之AOF詳解(Redis專欄啟動)

    【Redis】Redis持久化之AOF詳解(Redis專欄啟動)

    ??作者簡介:小明java問道之路, 2022年度博客之星全國TOP3 ,專注于后端、中間件、計算機底層、架構設計演進與穩(wěn)定性建工設優(yōu)化。文章內(nèi)容兼具廣度深度、大廠技術方案,對待技術喜歡推理加驗證,就職于知名金融公司后端高級工程師。 ? ? ? ?? ?? 熱衷分享,喜歡原

    2024年02月02日
    瀏覽(30)
  • 【Redis】Redis持久化機制RDB與AOF

    【Redis】Redis持久化機制RDB與AOF

    目錄 一、RDB 1、概念 2、RDB文件保存 3、執(zhí)行RDB 4、觸發(fā)RDB 5、fork原理 6、RDB的缺點 二、AOF 1、概念 2、開啟AOF 3、觸發(fā)AOF 4、觸發(fā)重寫AOF 三、區(qū)別 RDB全稱為Redis Database Backup File(Redis數(shù)據(jù)備份文件),也叫做Redis數(shù)據(jù)快照。簡單的來說就是把某一時刻Redis內(nèi)存里的數(shù)據(jù)都記錄到磁

    2024年02月08日
    瀏覽(40)
  • 【征服redis8】Redis的AOF持久化

    【征服redis8】Redis的AOF持久化

    Redis 支持多種持久化方式來保證數(shù)據(jù)的可靠性和持久性。前面我們介紹了RDB方式。我們我們介紹第二種方式——AOF(Append Only File)機制是一種常用的持久化方式,它記錄了所有對 Redis 數(shù)據(jù)庫進行修改的命令,在 Redis 重啟時可以使用這些命令來重構數(shù)據(jù)庫狀態(tài)。? 目錄 1.AOF的

    2024年01月19日
    瀏覽(34)
  • redis 持久化 RDB + AOF

    redis 持久化 RDB + AOF

    RDB(Redis DataBase)和AOF(Append Only File) RDB,簡而言之,就是在不同的時間點,將redis存儲的數(shù)據(jù)生成快照并存儲到磁盤等介質(zhì)上 AOF,那就是將redis執(zhí)行過的所有寫指令記錄下來,在下次redis重新啟動時,只要把這些寫指令從前到后再重復執(zhí)行一遍,就可以實現(xiàn)數(shù)據(jù)恢復了。

    2024年02月03日
    瀏覽(26)
  • Redis系統(tǒng)學習(高級篇)-Redis持久化-AOF方式

    目錄 一、是什么AOF? 二、AOF如何開啟 以及觸發(fā)策略有哪些 三、AOF文件重寫 四、AOF與RDB對比 就是通過每次記錄寫操作,最終通過來依次這些命令來達到恢復數(shù)據(jù)的目的 save \\\"\\\"可以關閉掉RDB appendonly yes 開啟AOF 觸發(fā)策略有: 1. 每一次的執(zhí)行命令都會被記錄 appendfsync always 2.先將

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包