當前位置:吉日网官网 - 紀念幣收藏 - 記者:妳了解Redis的緩沖區嗎?

記者:妳了解Redis的緩沖區嗎?

大家好,我是齊Xi(xρ)。

Redis當然大家都很熟悉,但是在使用層面看不到的地方很容易被忽略。今天要和大家分享的是Redis中各種緩沖區的作用,溢出的後果以及優化方向。

在開始正文之前,我想多說幾句。無論Redis還是其他中間件,很多底層原理都是相似的,設計思路都是通用的。

如果妳以後在學習任何新的框架/組件,可以試著把它們和已經學過的知識點聯系起來,這樣會更容易理解,不要說死記硬背了。

比如現在說的緩沖區的目的是什麽?

沒有它,為了性能。

要麽緩存數據提高響應速度。例如,MySQL中有壹個更改緩沖區。

要麽擔心消費者的速度跟不上生產,害怕數據丟失。因此,需要臨時存儲生產數據。這就是Redis的緩沖劑的作用。

另外,消費者的速度跟不上。如果是同步處理,會不會也拖慢了生產者,所以這裏其實是在保證生產者的速度。

有的讀者可能會說:廢話,消費者跟不上,生產者有什麽用?

其實,有沒有可能消費者用的時候,生產者並不在意?前者負責處理後者需要什麽,給它什麽。生產者很忙,還有很多其他數據要處理,不能等消費者同時消費完了再做其他事情。

好像開頭擴大了壹點。我要了。下面我會詳細說壹下。如果妳有任何問題,請上車。七夕正式開始。

首先,Redis有什麽緩沖?

壹個*** 4:

服務器將為每個連接的客戶端設置壹個輸入緩沖區。

臨時存儲請求的數據。

輸入緩沖區將臨時存儲客戶端發送的命令,Redis主線程將從輸入緩沖區讀取命令並進行處理。

為了避免客戶端和服務器的發送和處理速度不匹配,這和後面要提到的輸出緩沖區是壹樣的。

首先,緩沖區是壹個固定大小的內存區域。如果要填充這個地方,Redis會直接關閉客戶端連接。

保護好自己。妳的客戶掛了總比我的服務器掛了好。壹旦服務器掛機,所有客戶端都沒用了。

那麽在填充緩沖器時有兩種情況:

然後將上述原則映射到Redis的場景中。

壹下子填滿的情況可以是將大量數據寫入Redis,數量級為百萬。

另壹種情況可能是Redis服務器由於耗時的操作而被阻塞,導致無法消耗輸入緩沖區數據。

對應以上兩種溢出場景,自然有優化方向。

在壹下子填滿的情況下,能不能考慮壹下子不寫那麽多數據,能不能把數據拆開(其實壹下子寫很多數據是不合理的)

另外,是否可以增加緩沖區的大小?

這其實是不可以的,因為沒有地方設置。目前,服務器為每個客戶機輸入緩沖區分配的默認大小是1GB。

然後是第二個溢出場景:兩邊處理速度不壹致。

正常情況下,服務器應該不會長時間阻塞,所以我們需要看看是什麽原因導致了阻塞,並解決它。

與輸入緩沖區壹樣,服務器也會為每個連接的客戶端設置壹個輸出緩沖區。

同上,它也是壹個臨時請求數據。

這個地方其實就是我在文章開頭說的。生產者不關心消費者什麽時候用,只負責處理消費者之前要求的東西。

服務器通常連接多個客戶端,redis網絡通信模塊是單線程的(即使新版本支持多線程)。

如果沒有輸出緩沖會怎麽樣?

服務器處理了很多來自客戶端A的請求,需要通過壹個耗時的網絡操作返回給客戶端A。在這個過程中,客戶端B的請求沒有得到服務器的處理和響應,所以吞吐量不會上去。

有了緩沖區,至少服務器可以解放出來處理客戶端b的請求。

這也是同壹個輸入緩沖區,我就不啰嗦了。如果溢出,服務器也會關閉客戶端連接。

同樣,不要壹次讀取大量數據;MONITOR命令不會連續在線執行。

輸出緩沖區的大小可以通過client-output-buffer-limit設置。

但是壹般來說我們不需要改,因為默認情況就夠了,知道這裏就好了。

溫馨提醒下,如果不了解Redis同步/復制,比如完全/增量復制的讀者,建議妳看看我的文章:壹篇文章讓妳了解Redis主從同步。

讓我們回到正題。

有復制就要有主從,主從之間的數據復制包括全量復制和增量復制。

全復制是同步所有數據,而增量復制只會在主從庫網絡斷開時,將主庫收到的命令同步到從庫。

臨時數據。

在主節點上為每個從節點維護壹個復制緩沖區。

在滿量程復制時,主節點在向從節點傳輸RDB文件的同時,會繼續接收客戶端發送的寫命令請求,並保存在復制緩沖區中,待RDB文件傳輸完成後,再發送給從節點執行。

從節點接收和加載RDB的速度很慢,同時主節點接收到大量的寫命令,這些寫命令會在復制緩沖區中累積,最終溢出。

壹旦溢出,主節點會直接關閉與從節點的連接進行復制操作,導致完全復制失敗。

可以將主節點的數據量控制在2~4GB(僅供參考),這樣可以使滿量程同步執行更快,避免復制緩沖區堆積過多命令。

您還可以調整緩沖區大小,或者之前的客戶端輸出緩沖區限制參數。

例如:config set client-output-buffer-limit slave 512mb 128 MB 60。

這是新副本中使用的緩沖區。

臨時數據。

當從節點意外斷開並重新連接時,在此期間未同步的數據可以從該緩沖器同步。

不會溢出來。(出乎意料。jpg)

緩沖區本質上是壹個固定長度的先進先出隊列,默認值為1MB。

所以當隊列滿了,不是錯誤,也不像上面的緩沖區直接關閉連接。相反,它會覆蓋首先進入隊列的數據。

因此,如果從節點沒有同步這些舊命令數據,它將導致主節點和從節點完全復制,而不是增量復制。

調整復制積壓緩沖區的大小。參數是repl_backlog_size。

  • 上一篇:金山快盤的產品特點
  • 下一篇:龍的象征意義
  • copyright 2024吉日网官网