北京JAVA基礎面試30天打卡05

一、Redis 的持久化機制有哪些?**

Redis 提供兩種主要的持久化機制:

? RDB(Redis DataBase)快照持久化
  • 定期將 Redis 中的數據以“快照”的形式寫入磁盤(生成 .rdb 文件)。
  • 啟動 Redis 時會加載 .rdb 文件恢復數據。
  • 觸發方式:
    • 手動執行 SAVEBGSAVE 命令。
    • 根據配置(如 save 900 1)定期自動觸發。
  • 優點:
    • 恢復速度快,占用磁盤小。
  • 缺點:
    • 異常宕機可能會丟失最近修改的數據(非實時)。
? AOF(Append Only File)追加日志持久化
  • 將每次寫操作(如 SET, HSET, INCR 等)以日志方式記錄到 .aof 文件中。
  • 啟動 Redis 時重放 .aof 日志以恢復數據。
  • 刷新策略:
    • always:每次操作都寫入磁盤,最安全但性能差。
    • everysec(默認):每秒寫一次,性能與安全的折中。
    • no:完全由操作系統控制刷盤時機。
  • 優點:
    • 持久化更可靠,可恢復最近的數據。
  • 缺點:
    • 文件比 RDB 大,恢復速度慢。
? 混合持久化(Redis 4.0+)
  • 同時使用 AOF 和 RDB 優勢。
  • RDB 保存大部分數據,AOF 記錄最后的增量變化。
  • 適用于既要快速恢復也要數據盡量完整的場景。

總結一張圖(文字版):

機制類型描述優缺點
RDB快照形式保存數據到硬盤快速恢復、可能丟數據
AOF每次寫操作記錄日志數據更完整、文件大
主從復制主節點寫、從節點讀高可用、讀寫分離
過期刪除定時 / 惰性 / 定期兼顧性能和內存釋放

🏢 實際大廠方案舉例(簡化版)

公司/場景持久化策略說明
阿里巴巴關閉持久化(緩存場景)Redis 宕機自動重建緩存,不做持久化
字節跳動AOF everysec + RDB 混合用于關鍵服務,定期冷備 RDB
京東主從復制 + AOF + 異地災備高可用架構,主機持久化 AOF,從節點只讀
騰訊云 Redis默認開啟 AOF everysec + RDB提供用戶可選關閉
美團自研容器化 Redis + AOF everysec使用混合持久化恢復用戶 session 數據

🧠 總結建議

需求類型推薦持久化方案理由
緩存為主、能容忍丟失不持久化最佳性能
數據重要、不能丟AOF everysec + RDB高可靠性恢復
啟動速度要求高RDB + 備份定期觸發恢復快,節省磁盤
高可用架構主從 + 哨兵 + 持久化容災能力強

二、Redis 主從復制的實現原理

Redis 主從復制(Replication)用于實現讀寫分離、數據備份和高可用架構。

實現流程:
  1. 從節點發送 SYNC 請求:
    • 啟動后通過配置或命令(如 SLAVEOF)向主節點發起復制請求。
  2. 主節點執行 RDB 快照:
    • 執行 BGSAVE 生成 RDB 快照,將數據發送給從節點。
  3. 從節點加載快照:
    • 清空原有數據后加載主節點傳過來的 RDB 文件。
  4. 復制增量寫命令:
    • 主節點在 RDB 傳輸完后將期間的寫命令緩存在 replication backlog buffer 中,一并發給從節點。
    • 此后主節點每執行一次寫命令就同步給所有從節點。
特點:
  • 異步復制: 默認是異步,但 Redis 6.0 起支持部分同步機制。
  • 斷線重連:
    • 若斷線,從節點嘗試“部分重同步”(基于 runIdoffset)。
    • 不行時才進行完整的 RDB + AOF 同步。

三、 Redis 數據過期后的刪除策略

Redis 為了釋放內存,提供了三種刪除過期 key 的策略:

? 定時刪除(主動刪除)
  • 給 key 設置了過期時間后,Redis 會為其設置一個定時器,到時間自動刪除。
  • 優點: 內存及時釋放。
  • 缺點: 會影響 CPU 性能(每個 key 都定時檢查代價高)。
? 惰性刪除(被動刪除)
  • 客戶端訪問某個 key 時,Redis 會先檢查是否過期,若過期就刪除。
  • 優點: 不浪費 CPU。
  • 缺點: 若沒有訪問,過期 key 會長期占內存。
? 定期刪除(定期抽樣刪除)
  • Redis 會周期性(默認 100ms)隨機抽取部分 key 進行過期檢查并刪除。
  • 優點: 兼顧性能與內存控制。
  • 缺點: 某些 key 可能在長時間內未被檢查到,造成內存浪費。

四、淘汰策略

策略名稱 策略說明 適用場景
noeviction 不淘汰,直接拒絕寫入操作(默認策略) 數據不能丟的場景(如金融)
allkeys-lru 所有鍵中,淘汰最久未使用的(Least Recently Used) 通用緩存、Web緩存
volatile-lru 只在設置了過期時間(TTL)的鍵中,淘汰最久未使用的 局部熱數據緩存
allkeys-random 所有鍵中隨機淘汰 對訪問頻率無強依賴的緩存
volatile-random 只在設置了過期時間的鍵中隨機淘汰 弱一致性、低優先級緩存
volatile-ttl 只淘汰 TTL 剩余時間最短的 key(即快要過期的 key) 想優先保留長期 key

五、LUR/隨機策略內部機制

? allkeys-lru 是最常用的策略
Redis 內部維護了訪問信息(LRU/approximate LRU),采用 采樣+近似LRU算法:

抽樣 5 個 key(默認),比較其訪問時間,淘汰最久未使用的。
可以通過 maxmemory-samples 設置樣本數(越大越精準,但耗 CPU):

六、實踐建議

💡 推薦策略組合:
場景 推薦配置
通用緩存 allkeys-lru(經典)
只緩存部分熱點數據 volatile-lru + 設置 TTL
極限性能下,快速釋放空間 allkeys-random
數據敏感/不能自動淘汰 noeviction(程序層判斷+降級處理)

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

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

相關文章

深入理解 Maven POM 文件:核心配置詳解

前言 在 Java 開發領域,Apache Maven 是一個強大的項目管理和構建自動化工具。而pom.xml文件,作為 Maven 項目的“心臟”,定義了項目的方方面面。本文將帶你深入了解pom.xml中最常用和最重要的配置項,幫助你快速掌握 Maven 的核心…

嵌入式學習的第四十天-51單片機

一、基本框架第一階段:1980年、Intel英特爾MCS-51系列:8051型號單片機、工業控制領域、由MCU市場->CPU市場。1、CPU(Central Processing Unit,中央處理單元)?是計算機的核心部件,負責執行計算機指令和處…

Linux(17)——Linux進程信號(上)

目錄 一、信號速識 ??生活中的信號 ??技術上的信號 ??信號的發送和記錄 ??信號處理概述 二、產生信號 ??通過終端產生信號 ??通過函數發送信號 ??通過軟件產生信號 ??通過硬件產生信號 一、信號速識 ??生活中的信號 你在網上買了很多件商品&…

使用pytest對接口進行自動化測試

上篇博客中講述了什么是接口測試,已經自動化接口測試流程,這篇博客總結如何實現接口自動化測試(一)requestsrequests庫是Python對HTTP通信的一個工具,將http協議操作封裝成簡單的接口,能夠讓我們高效的編寫…

信息安全及防火墻總結

1.1 信息安全現狀及挑戰信息安全概述 信息安全:防止任何對數據進行未授權訪問的措施,或者防止造成信息有意無意泄漏、破壞、 丟失等問題的發生,讓數據處于遠離危險、免于威脅的狀態或特性。 網絡安全:計算機網絡環境下的信息安全。…

20250808組題總結

A - A Pak Chanek 有一個包含 nnn 個正整數的數組aaa。由于他正在學習如何計算兩個數字的向下取整平均值,他希望在他的數組 aaa 上進行練習。當數組 aaa 至少有兩個元素時,Pak Chanek 將執行以下三步操作: ?\bullet?選擇兩個不同的索引 ii…

【Python 語法糖小火鍋 · 第 5 涮 · 完結】

一、糖味一句話 Python 3.10 的 match-case 把「類型 值 嵌套」一次性拆開, 可讀性 10,bug 數 10,if-elif 可以安心退休了。二、1 行示例 3 連發 # ① 值匹配 match status:case 200: msg "ok"case 404: msg "not found&q…

寫 SPSS文件系統

寫入 SPSS 系統文件(.sav、.zsav) 以下為相關的 SPSS 命令(以大寫形式 CAPS 呈現) savFileName : str SPSS 數據文件的文件名 以 .sav 結尾的文件使用舊版壓縮方案壓縮。 以 _uncompressed.sav 結尾的文件不壓縮,這在需…

云服務器--阿里云OSS(1)【阿里云OSS簡單介紹以及環境準備】

一、阿里云OSS簡介 定義:阿里云OSS(Object Storage Service)是阿里云提供的對象存儲服務,支持海量數據的存儲和管理。 存儲方式:基于“對象存儲”,文件以對象形式存儲,無需管理文件系統結構。 …

R語言代碼加密(1)

1、使用Compiler包library(compiler) cmpfile("1.R")#實現對R腳本的整體加密 compiler::loadcmp("1.Rc")#調用R腳本存在問題是,該方法僅對腳本進行加密。在加載生成的Rc文件后,腳本內具體函數,是可以看到具體內容的。針對…

【面試場景題】通過LinkedHashMap來實現LRU與LFU

文章目錄一、LRU與LFU的概念1. LRU(Least Recently Used,最近最少使用)2. LFU(Least Frequently Used,最不經常使用)二、LinkedHashMap的特性三、用LinkedHashMap實現LRU實現代碼:原理說明&…

第5章 Excel公式與函數應用指南(2):數學函數

5.2 數學函數 Excel作為強大的數據處理工具,其內置的數學函數體系為用戶提供了豐富的計算能力。從基礎的四則運算到復雜的指數對數計算,從簡單的數值舍入到專業的矩陣運算,Excel的數學函數幾乎可以滿足各類計算需求。 本節將重點為您解析七個常用且實用的數學函數:求和函…

mysql復制連接下的所有表+一次性拷貝到自己的庫

1.導出鏈接下的所有數據mysqldump -h 地址 -u 數據庫名 -p --all-databases --single-transaction --master-data2 > all_dbs.sql2.導入自己的庫mysql -h 127.0.0.1 -u root -p < all_dbs.sql3.指定導出某些庫mysqldump -u root -p --databases db1 db2 db3 > /path/t…

開發手札:UnrealEngine和Unity3d坐標系問題

最近把一套網絡模塊和一套組件模塊從u3d改造到ue4。網絡模塊通用性很高&#xff0c;畢竟協議都是通用網絡協議&#xff0c;改造后沒啥問題。但是改造組件模塊的時候就遇到了問題。首先&#xff0c;unity3d的坐標系是標準左手坐標系&#xff0c;如下&#xff1a;同時自己的幾何算…

QML 鼠標穿透

事件&#xff1a; 有一個輸入框(TextField)&#xff0c;需要實現鼠標懸浮時改變邊框顏色&#xff0c;鼠標移出后恢復原來邊框顏色&#xff1b; 這時如果需要實現此功能&#xff0c;就得使用到MouseArea&#xff0c;鼠標操作區域填充滿整個TextField。 然后實現鼠標移入移入出的…

VR 設備 PCB 怎樣憑借高頻材料達成高速傳輸

VR 設備的沉浸式體驗依賴于高分辨率圖像與低延遲交互&#xff0c;這要求設備內部數據傳輸速率達到 10Gbps 以上&#xff0c;而印制線路板&#xff08;PCB&#xff09;作為信號傳輸的核心載體&#xff0c;其材料性能直接決定傳輸效率。高頻材料憑借低介電常數&#xff08;Dk&…

Oracle字段操作

1. 新增字段 -- 新增字段 ALTER TABLE MES.WT_SUPPLEMENT_RECORD ADD (PAR_ATTR3 NUMBER DEFAULT NULL);2. 修改字段類型 -- 修改字段類型 ALTER TABLE MES.WT_SUPPLEMENT_RECORD MODIFY (PAR_ATTR3 VARCHAR2(32));3. 刪除字段 -- 刪除字段 ALTER TABLE MES.WT_SUPPLEMENT_RECO…

【原創】基于 Flask 的簡單文件收集器

在單位內網環境中&#xff0c;我經常需要收集 pdf 格式的記錄表。于是我基于 ai ide&#xff0c;開發了一個基于 Flask 開發的輕量級文件上傳服務項目&#xff0c;部署在單位飛騰芯的銀河麒麟系統上&#xff08;當然由于 python 的跨平臺&#xff0c;在 windows 和 mac 上也可部…

學習Java的Day28

今天在昨天完成的留言板項目基礎上&#xff0c;我進一步開發了一個酒店房型管理系統。該系統采用MVC架構&#xff0c;主要功能是對酒店房型信息進行增刪改查操作。數據庫設計方面&#xff0c;我創建了hotel_room_type表&#xff0c;包含以下字段&#xff1a;id&#xff1a;主鍵…

Leetcode——556. 下一個更大元素 III

題目鏈接&#xff1a;556. 下一個更大元素 III &#xff08;由于圖片上傳失敗&#xff0c;不貼原題目了&#xff0c;有需要可以前往力扣查看&#xff09; 本文給出該題的單調棧做法&#xff0c;同時繞過所有庫函數&#xff0c;所有邏輯均自行實現。 本題的思路就是從右向左按…