redis的aof重寫為什麼要後台重寫並且在期間程序的新命令要同時寫到aof緩衝區和aof重寫緩衝區?

時間 2021-06-01 09:16:52

1樓:AOJ

aof重寫應該沒人會開吧,重寫只是重寫開始重寫那個時間點的aof檔案,所以完整aof檔案確實需要記錄變更。這個概念和redis生成rdb檔案原理類似的,它要用到fork子程序雖然redis做了cow 但是在重寫期間的新變動資料主程序確實需要同步的多做一步 cow操作。

2樓:rlei

你的第乙個問題:

為什麼不一開始就不用後台重寫,直接阻塞主程序進行重寫呢?

Redis設計與實現裡面已經寫得很清楚了:

很明顯, 作為一種輔佐性的維護手段, Redis 不希望 AOF 重寫造成伺服器無法處理請求, 所以 Redis 決定將 AOF 重寫程式放到(後台)子程序裡執行, 這樣處理的最大好處是:

1. 子程序進行 AOF 重寫期間,主程序可以繼續處理命令請求。

2. 子程序帶有主程序的資料副本,使用子程序而不是執行緒,可以在避免鎖的情況下,保證資料的安全性。

你所說的『到底還是阻塞了主程序』只是重寫完成的時候發生一次。如果全放在主程序裡做,整個正常操作都會受重寫過程的影響。

你的第二個問題:

aof重寫檔案就直接覆蓋aof檔案了,所以重寫期間aof緩衝區完全沒有寫入必要

AOF重寫緩衝區並不擁有完整的AOF記錄,只有fork出子程序之後的內容,而且這個快取和正常AOF檔案不同,並不落盤,只是為了快速暫存重寫期間新增的資料,完全是個臨時的buffer而已。

拉普拉斯為什麼要重寫力學?

喵喵 最簡單的原因是,1.拉格朗日量是標量 廣相下是標量密度還是反密度我忘了 而牛二是向量方程,三維下有三個方程。2.描述場時,用牛頓,電磁場要人為規定很多東西,比如麥克斯韋方程組,有4個。而寫成拉格朗日量就只有乙個,能推出4個 3.對稱性在拉格朗日量中最好描述 王清揚 首先,是拉格朗日不是拉普拉斯...

redis 為什麼是單執行緒的?

詩和遠方 說Redis是單執行緒是不準確的,其實是多程序,多執行緒的,但如果說其I O模型是單執行緒那就是對的。接下來我們說說為什麼I O模型要單執行緒。我們用快取的目的無非就是做併發控制,快取資料,對效能都有一定的要求 注意這裡是指吞吐量和響應時間 最原始的方式就是單程序阻塞式I O,這樣我們一次...

關於redis的非同步api, 為什麼很少有人用非同步方式?沒必要嗎?

hero 我覺得可能是因為redis本身的操作是單執行緒的,就算是你非同步呼叫api,到了redis還是會被放到佇列裡面,所以同步 非同步沒什麼區別感覺 韋易笑 方法1 數數,發出去幾個請求,數一下,回來的時候,數一下,找到對應的請求,但是需要很多地方注意,別寫錯了,還有是讀一遍redis協議,看看...