搜尋
首頁資料庫RedisRedis內存過大會怎麼樣

Redis內存過大會怎麼樣

May 26, 2023 pm 11:19 PM
redis

1 主庫宕機

先來看一下主庫宕機容災過程:如下圖

Redis內存過大會怎麼樣

##在主庫宕機的時候,我們最常見的容災策略為「切主」。具體為從該叢集剩餘從庫中選出一個從庫並將其升級為主庫,該從庫升級為主庫後再將剩餘從庫掛載至其下成為其從庫,最終恢復整個主從集群結構。

以上是一個完整的容災過程,而代價***的過程為從函式庫的重新掛載,而非主函式庫的切換。

這是因為redis無法像mysql、mongodb那樣基於同步的點位在主庫發生變化後從新的主庫繼續同步資料。 在redis叢集中一旦從庫換主,redis的做法是將更換主庫的從庫清空然後從新主庫完整同步一份資料再進行續傳。

整個從庫重做流程是這樣的:

  1. 主庫bgsave自身資料到磁碟

  2. 主庫發送rdb檔案到從庫

  3. 從庫開始載入

  4. #載入完畢開始續傳,同時開始提供服務

很明顯,在這個過程中redis的記憶體體積越大以上每一個步驟的時間都會被拉長,實際測試的資料如下(我們自認我們的機器效能比較好):

Redis內存過大會怎麼樣

可以看到,當資料達到20G的時候,一個從庫的恢復時間已經被拉長到了將近20分鐘,如果有10個從庫那麼如果依次恢復則共需200分鐘,而如果此時該從庫承擔著大量的讀取請求你能夠忍受這麼長的恢復時間嗎?

看到這裡你肯定會問:為什麼不能同時重做所有從庫?這是因為所有從庫如果同時向主庫請求rdb檔案那麼主庫的網卡則立即跑滿從而進入一個無法正常提供服務的狀態,此時主庫又死了,簡直是雪上加霜。

當然,我們可以批次恢復從庫,例如兩兩一組,那麼全部從庫的恢復時間也僅僅從200分鐘降低到了100分鐘,這不是五十步笑百步嗎?

另一個重要問題在於第四點中的標紅位置,續傳可以理解為一個簡化的mongodb的oplog,它是一個體積固定的記憶體空間,我們稱之為「同步緩衝區」。

redis主庫的寫入操作都會在該區域存放一份然後發送給從庫,而如果在上文中1,2,3步耗時太久那麼很可能這個同步緩衝區就被重寫,此時從函式庫無法找到對應的續傳位置它會怎麼做?答案是重做1,2,3步!

但因為我們無法解決1,2,3步的耗時因此該從庫會永遠的進入惡性循環:不停的向主庫請求完整數據,結果對主庫的網卡造成嚴重影響。

2 擴容問題

很多時候會出現流量的突發性成長,通常在找到原因之前我們的緊急做法就是擴容了。

而根據場景一中的表格,一個20G的redis擴容一個從庫需要將近20分鐘,在這個緊急的時刻20分鐘業務能夠容忍嗎?可能還沒擴好就死翹翹了。

3 網路不好導致從庫重做最終引發雪崩

該場景的***問題是主庫與從庫的同步中斷,而此時很可能從庫仍然在接受寫入請求,那麼一旦中斷時間過長同步緩衝區就很可能被複寫。此時從庫上一次的同步位置已遺失,在網路恢復後雖然主庫沒有發生變化但由於從庫的同步位置丟失了從庫必須進行重做,也就是問題一中的1,2,3, 4步。如果此時主庫內存體積過大那麼從庫重做速度就會很慢,而發送到從庫的讀取請求就會受到嚴重影響,同時由於傳輸的rdb文件的體積過大,主庫的網卡在相當長的一段時間都會受到嚴重影響。

4 記憶體越大,觸發持久化的操作阻塞主執行緒的時間越長

Redis是單執行緒的記憶體資料庫,在redis需要執行耗時的操作時,會fork一個新程序來做,例如bgsave,bgrewriteaof。 Fork新進程時,雖然可共享的資料內容不需要複製,但會複製先前進程空間的記憶體頁表,這個複製是主執行緒來做的,會阻塞所有的讀寫操作,並且隨著記憶體使用量越大耗時越長。例如:記憶體20G的redis,bgsave複製記憶體頁表耗時約750ms,redis主執行緒也會因為它阻塞750ms。

解決方法

解決方法當然就是極力減少記憶體的使用了,一般情況下,我們都是這麼做的:

#1 設定過期時間

對具有時效性的key設定過期時間,透過redis自身的過期key清理策略來降低過期key對於記憶體的佔用,同時也能夠減少業務的麻煩,不需要定期清理了

2 不存放垃圾到redis中

這簡直就是廢話,但是,有跟我們同病相憐的人麼?

#3 及時清理無用數據

例如一個redis承載了3個業務的數據,一段時間後有2個業務下線了,那你就把這兩個業務的相關數據清理了唄

4 盡量對數據進行壓縮

例如一些長文本形式的數據,壓縮能夠大幅降低記憶體佔用

5 專注於記憶體成長並定位大容量key

不管是DBA還是開發人員,你用redis,你就必須關注內存,否則,你其實就是不稱職的,這裡可以分析redis實例中哪些key比較大從而幫助業務快速定位異常key(非預期增長的key,往往是問題之源)

6 pika

如果實在不想搞的那麼累,那就把業務遷移到新開源的pika上面,這樣就不用太關注記憶體了,redis記憶體太大引發的問題,那也都不是問題了。

以上是Redis內存過大會怎麼樣的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
REDIS:了解其架構和目的REDIS:了解其架構和目的Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

REDIS與SQL數據庫:關鍵差異REDIS與SQL數據庫:關鍵差異Apr 25, 2025 am 12:02 AM

Redis和SQL數據庫的主要區別在於:Redis是內存數據庫,適用於高性能和靈活性需求;SQL數據庫是關係型數據庫,適用於復雜查詢和數據一致性需求。具體來說,1)Redis提供高速數據訪問和緩存服務,支持多種數據類型,適用於緩存和實時數據處理;2)SQL數據庫通過表格結構管理數據,支持複雜查詢和事務處理,適用於電商和金融系統等需要數據一致性的場景。

REDIS:它如何充當數據存儲和服務REDIS:它如何充當數據存儲和服務Apr 24, 2025 am 12:08 AM

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

REDIS與其他數據庫:比較分析REDIS與其他數據庫:比較分析Apr 23, 2025 am 12:16 AM

Redis與其他數據庫相比,具有以下獨特優勢:1)速度極快,讀寫操作通常在微秒級別;2)支持豐富的數據結構和操作;3)靈活的使用場景,如緩存、計數器和發布訂閱。選擇Redis還是其他數據庫需根據具體需求和場景,Redis在高性能、低延遲應用中表現出色。

REDIS的角色:探索數據存儲和管理功能REDIS的角色:探索數據存儲和管理功能Apr 22, 2025 am 12:10 AM

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

REDIS:了解NOSQL概念REDIS:了解NOSQL概念Apr 21, 2025 am 12:04 AM

Redis是一種NoSQL數據庫,適用於大規模數據的高效存儲和訪問。 1.Redis是開源的內存數據結構存儲系統,支持多種數據結構。 2.它提供極快的讀寫速度,適合緩存、會話管理等。 3.Redis支持持久化,通過RDB和AOF方式確保數據安全。 4.使用示例包括基本的鍵值對操作和高級的集合去重功能。 5.常見錯誤包括連接問題、數據類型不匹配和內存溢出,需注意調試。 6.性能優化建議包括選擇合適的數據結構和設置內存淘汰策略。

REDIS:現實世界的用例和示例REDIS:現實世界的用例和示例Apr 20, 2025 am 12:06 AM

Redis在現實世界中的應用包括:1.作為緩存系統加速數據庫查詢,2.存儲Web應用的會話數據,3.實現實時排行榜,4.作為消息隊列簡化消息傳遞。 Redis的多功能性和高性能使其在這些場景中大放異彩。

REDIS:探索其功能和功能REDIS:探索其功能和功能Apr 19, 2025 am 12:04 AM

Redis脫穎而出是因為其高速、多功能性和豐富的數據結構。 1)Redis支持字符串、列表、集合、散列和有序集合等數據結構。 2)它通過內存存儲數據,支持RDB和AOF持久化。 3)從Redis6.0開始引入多線程處理I/O操作,提升了高並發場景下的性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器