Redis Copy-on-Write機制:

Copy-on-Write機制: 父子進程共享內存頁 當父進程修改數據時,內核會復制被修改的頁 這可能導致內存使用量暫時增加 通俗的話描述一下

可以用一個生活中的例子來通俗解釋?Copy-on-Write(寫時復制)?機制:


📖 比喻:父子共用一本作業本

假設有一對父子(父進程和子進程)要完成以下任務:

  1. 初始狀態:父親有一本寫滿數據的作業本(Redis內存數據),現在孩子需要做一份完全相同的作業(RDB持久化)。

  2. 傳統方式(非COW):
    ?? 父親直接復印整本作業給孩子 →?浪費紙張(內存),而且復印過程很耗時。

  3. Copy-on-Write方式(Redis實際采用):
    ??第一步:父親直接把作業本借給孩子看,兩人暫時共用同一本作業(父子進程共享內存頁)。
    ??第二步:如果父親要修改作業的某一頁(父進程修改數據):

    • ?? 內核會單獨復制這一頁給孩子(復制被修改的內存頁)

    • 📝 父親在新復制的頁上修改,不影響孩子讀原內容

    • 📚 其他未修改的頁繼續保持共享


💡 關鍵點:

  1. 省資源:一開始不復制全部數據,只有真正修改時才復制局部(節省內存)。

  2. 副作用:如果父親頻繁修改作業(Redis寫入量大),會導致復制的頁越來越多,內存占用暫時上升(這就是BGSAVE期間可能出現的"內存翻倍"現象)。

  3. 短暫阻塞:剛開始"借作業本"時(fork子進程),父親需要整理作業本目錄(內核準備進程數據結構),這時會短暫暫停(所有請求被阻塞)。


🌰 Redis中的實際表現:

  • 執行BGSAVE時,如果Redis內存有10GB:

    • 理想情況:無寫入操作 →?內存幾乎不增加(共享所有頁)

    • 最壞情況:寫入全部數據 →?內存臨時增加10GB(所有頁被復制)

    • 通常情況:增加約1-2GB(只有部分頁被修改和復制)

?? 這就是為什么大內存Redis實例執行BGSAVE時,需要預留額外內存空間。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90186.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS加固工具有哪些?從零源碼到深度混淆的全景解讀

在iOS安全加固領域,不同項目類型對保護需求有著本質差異:“我有源碼”與“我只有IPA”兩條路徑決定了你該用什么工具。本文將從 無需源碼處理整個IPA包 到 源碼級編譯期混淆,分層探討主流工具如何發揮價值,并附上適配方案建議。工…

Composer 可以通過指定 PHP 版本運行

是的,Composer 可以通過指定 PHP 版本運行,尤其是在服務器上有多個 PHP 版本時(如 PHP 7.x 和 PHP 8.x)。以下是幾種常見方法:方法 1:使用 php 命令指定版本 Composer 依賴系統中的 php 命令,因…

vscode文件顏色,只顯示自己更改的文件顏色

這個主要是因為你github git下來以后,用vscode打開會默認顯示更改了,你只要在這里先手動取消更改就行了,注意不要把你自己更改的取消了

記錄我coding印象比較深刻的BUG

4778:我的BUG噩夢問題描述:DAB播放中關ACC掉電后開ACC,手動切到FM/AM(有時第一次切換出現問題/有時第二次切換出現問題),FM/AM不記憶關ACC前電臺或者FM/AM關ACC掉電后開ACC,手動切到DAB再回到FM/AM,FM/AM不…

Kubernetes集群中Istio mTLS握手失敗問題排查與解決方案

Kubernetes集群中Istio mTLS握手失敗問題排查與解決方案 在微服務架構中,Istio 提供了基于 Envoy 的服務網格能力,其中 mTLS(雙向 TLS)是確保服務間通信安全的重要機制。但在生產環境中,開發者常常會遇到 mTLS 握手失敗…

antd+react+可輸入的下拉選擇組件

該組件是一個可輸入的下拉選擇組件,支持從預設選項中選擇或手動輸入自定義值。組件基于 React 和 Ant Design 實現,具有良好的交互體驗和靈活的配置選項。 🧠 核心邏輯分析 1. 狀態管理 const [isInput, setIsInput] useState(false); con…

React 面試題庫

openAI React 面試題庫 以下題庫按模塊分類(React 架構與運行機制、核心 API、Diff 算法與事件機制、Fiber 架構與調度、并發模式與過渡、生命周期及新版生命周期對照、綜合源碼題、擴展專題、React 與 Vue 對比),并按難度(初級…

查看兩個tv and 手機模擬器的ip

要查看 Android 模擬器 的 IP 地址,你可以使用 ADB shell 命令來獲取。下面是詳細步驟:步驟 1:查看已連接的模擬器首先,確保你連接的模擬器已經啟動并且連接到 ADB。你可以運行以下命令來查看已連接的設備:adb devices…

從零到一:用C語言構建貪吃蛇(一)- 基礎框架與數據結構

資料合集下載鏈接: ??https://pan.quark.cn/s/472bbdfcd014? 第一步:繪制游戲世界 - 定義地圖邊界 任何游戲都需要一個舞臺。在貪吃蛇中,這個舞臺就是一個有明確邊界的矩形地圖。 1. 確定尺寸 根據筆記,我們首先要確定地圖的尺寸。使用宏定義(??#define??)是…

AWS RDS 排查性能問題

AWS RDS 排查數據庫問題 1.查看當前橫在執行的SQL select id,user,time,left(info,100) from information_schema.processlist where time>0 and info is not null order by time desc ;2.AWS RDS 查看性能詳情查看 Top SQL,AAS最高的幾個sql,然后看這…

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現持械檢測(C#代碼,UI界面版)

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現持械檢測(C#代碼,UI界面版)工業相機使用YoloV8模型實現持械檢測工業相機通過YoloV8模型實現持械檢測的技術背景在相機SDK中獲取圖像轉換圖像的代碼分析工業相機圖像轉換Bitmap圖像格…

在 WPF 啟動界面中心加載 GIF 動圖

在 WPF 啟動界面中心加載 GIF 動圖 在 WPF 啟動界面中心加載 GIF 動圖可以通過多種方式實現。下面我將提供一個完整的解決方案,包括使用第三方庫和純 WPF 實現兩種方法。 方法一:使用 WpfAnimatedGif 庫(推薦) 這是最簡單可靠的方…

Vue前端路由從入門到精通

目錄 第1章:路由的本質與Vue Router的魅力 1.1 什么是前端路由? 1.2 為什么選擇Vue Router? 1.3 快速上手:安裝與基本配置 1.4 一個小實踐:動態歡迎頁 第2章:路由配置的進階玩法 2.1 命名路由:給路由取個名字 2.2 動態路由的深度挖掘 2.3 嵌套路由:頁面中的頁面…

【Python】SQLAlchemy實現upsert

文章目錄? 通用思路1. 使用 merge() 方法(適用于簡單場景)2. 使用數據庫特定的 UPSERT 功能(推薦用于性能和并發安全)🟢 PostgreSQL: 使用 on_conflict_do_update🟡 MySQL: 使用 ON DUPLICATE KEY UPDATE&…

快速入門SwiftUI

SwiftUI的入門難度稍微有點高,但對于比較熟悉Swift的UIKit老手來說陣痛期大概1周以內,兩周內能達到UIkit的開發效率,個人總結快速入門路徑如下: 第一步 周期:1天 操作:閱讀蘋果官方demo 目的:…

【n8n教程筆記——工作流Workflow】文本課程(第一階段)——1、導航編輯器界面(Navigating the editor UI)介紹

https://docs.n8n.io/courses/ 文章目錄Navigating the Editor UIGetting startedEditor UI settingsLeft-side panelTop barCanvasNodesFinding nodesAdding nodesNode buttonsSummaryNavigating the Editor UI In this lesson you will learn how to navigate the Editor UI…

【Altium Designer2025】電子設計自動化(EDA)軟件——Altium Designer25版保姆級下載安裝詳細圖文教程(附安裝包)

今天給大家帶來精心編寫的Altium Designer2025版下載安裝全流程圖文指南,涵蓋從系統準備到安裝使用的完整過程。 教程嚴格遵循零廣告、純工具向原則,手把手教你如何正確安裝并配置好這款強大的軟件,讓你快速進入電路設計的世界! …

智象科技賦能金融、證券行業 IT 運維

一、金融、證券行業 IT 運維現狀剖析 金融、證券行業 IT 系統架構極其復雜,業務對時效性和連續性的要求近乎苛刻,同時安全監管嚴格,這些特點共同催生了諸多運維痛點。 系統架構復雜 :IT 系統包含多個業務系統、數據平臺和網絡架構…

微信小程序服務端快速對接指南(java版)

背景說明 本文檔旨在描述服務端在開發微信小程序時需要對接的小程序接口,以簡要的方式描述對接流程、接口文檔、使用場景。有些接口需要前后端配合,本文主要描述后端接口,對于前端僅輕輕點過。開發語言為Java,但是對接的思路跟語言沒有關系,應該不盡相同; 小程序上手路線…

微信小程序入門實例_____從零開始 開發一個“旅行清單 ”微信小程序

前面的博文中。我們陸續學習與開發了記賬等一些實用實用小程序的開發過程,今天來打造一個適合出行場景的工具 ——“旅行清單小程序”。無論是短途游玩還是長途旅行,它都能幫你梳理需要攜帶的物品,避免遺漏。下面就跟著步驟,一步步…