Redis面試——日志

一、RDB(Redis DataBase)

  1. RDB 全程是 Redis DataBase,它是一種將 Redis 在某一時刻內存中的數據以快照形式保存到磁盤的機制 ,相當于給執行save/bgsave命令時刻的內存數據庫數據拍了一張快照
  2. 我們如果通過save命令來執行快照,由于 Redis 是單線程模型,save命令會阻塞主線程,因為快照生成的過程比執行普通指令耗時更長,在此期間 Redis 無法處理客戶端請求。而bgsave命令會 fork 出一個子進程,由子進程在后臺執行備份工作,主線程可以繼續處理客戶端請求,不會造成阻塞。因此在實際應用中,推薦使用bgsave來生成 RDB 快照。需要注意的是,fork 子進程時會有短暫的阻塞,且會占用一定內存(基于寫時復制技術,父子進程共享內存,只有在數據發生修改時才會為子進程分配獨立內存)
  3. RDB 的優點是:
    1. 第一個是 RDB 生成的快照文件經過了二進制壓縮,體積相對較小。雖然 Redis 是內存數據庫,但數據量可能較大,不過經過壓縮處理后的 RDB 文件依然便于存儲和傳輸
    2. 第二個是它恢復數據的速度很快,因為在數據恢復時,直接將 RDB 文件中的數據一次性加載到內存即可,不需要像 AOF 那樣逐條重放日志。所以 RDB 適合做數據備份和災難恢復
  4. RDB 的缺點是:
    1. 第一個,兩次快照之間的數據可能會丟失。例如第一次快照后隔了很長時間才進行下一次快照,那么萬一數據庫宕機,就會丟失這兩次快照間隔期間的數據
    2. 第二個,如果頻繁執行快照,即使使用bgsave開啟后臺線程進行工作,fork 子進程以及子進程進行數據持久化操作都會占用 CPU、內存等系統資源,對服務器性能產生一定影響

二、AOF(Append Only File)

  1. Redis 會在硬盤上創建一個 AOF(Append Only File)文件,該文件用于記錄服務器執行的所有寫操作命令
  2. Redis 提供了三種 AOF 寫策略:
    1. always:每次執行寫操作后,Redis 主線程會立即將寫操作同步到硬盤上的 AOF 文件中。這種策略能保證數據的最高安全性,因為一旦寫操作執行成功,就會被持久化到磁盤,但會對性能產生較大影響,因為每次寫操作都涉及磁盤 I/O
    2. everysec:Redis 會使用一個后臺線程(更準確地說是子線程)每秒將這一秒內發生的寫操作追加到 AOF 文件中。這種策略在性能和數據安全性之間做了平衡,即使服務器發生故障,最多只會丟失一秒內的數據
    3. no:將數據寫入 AOF 文件的操作完全交給操作系統決定。Redis 只負責將寫操作追加到 AOF 緩沖區,由操作系統決定何時將緩沖區的數據刷新到磁盤。這種策略性能最高,但數據安全性最低,因為在操作系統未將數據刷新到磁盤時服務器宕機,可能會丟失較多數據
  3. AOF 的缺點在于:
    1. 由于 AOF 文件持續記錄寫操作,隨著時間推移和寫操作的增加,AOF 文件會變得越來越大,這會占用大量的磁盤空間
    2. 在恢復數據時,相較于 RDB 方式,AOF 恢復速度較慢。因為 Redis 單線程需要將 AOF 文件中的所有寫操作命令依次重新執行一遍,而 RDB 是直接將數據加載到內存
  4. 此外,Redis 為了解決 AOF 文件過大的問題,提供了 AOF 重寫機制,它可以在不改變數據庫狀態的前提下,將 AOF 文件中冗余的命令合并,從而減小 AOF 文件的體積

三、RDB vs AOF如何選擇?

  1. 如果需要快速恢復數據,采用 RDB 是比較合適的選擇。RDB 是將 Redis 某一時刻的內存數據以快照形式保存到磁盤,恢復數據時直接將 RDB 文件加載到內存,無需像 AOF 那樣重新執行大量的寫命令,因此恢復速度較快,能在短時間內讓 Redis 服務恢復到之前的狀態
  2. 如果需要保證數據的絕對安全,AOF(always)策略是一個好的選擇。使用?always?策略時,每次寫操作都會立即同步到磁盤上的 AOF 文件中,這樣即使 Redis 服務器發生故障或意外宕機,也不會丟失任何已執行的寫操作數據,最大程度地保證了數據的完整性和安全性。不過,這種策略會對 Redis 的性能產生較大影響,因為頻繁的磁盤 I/O 操作會成為性能瓶頸
  3. 在高并發場景下,選擇 RDB + AOF 結合的策略通常是比較明智的。RDB 可以定期生成數據快照,用于全量數據備份和在需要時快速恢復數據,減輕數據恢復的時間成本;AOF 采用 everysec 策略(而不是 always 策略,因為 always 策略在高并發下性能損耗過大),每秒將寫操作同步到 AOF 文件,在保證數據安全性(最多丟失 1 秒的數據)的同時,也不會對性能造成太大的影響。兩者結合,既能滿足高并發場景下對性能的要求,又能在一定程度上保證數據的安全性和可恢復性

四、總結與持久化配置建議

  1. 在通用場景下,采用RDB(每天定時執行) + AOF(everysec)結合的策略是較為常見且合理的選擇
  2. 如果對數據安全性要求極高,可以采用 AOF(always)策略

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

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

相關文章

【Android】常用參數實踐 用戶界面UI 布局文件XML

本文將系統總結 Android XML 布局的通用參數和常用布局類型的專屬規則 一、通用布局參數 這些參數適用于所有 View 和 ViewGroup,是布局設計的基石。 1. 尺寸控制 android:layout_width 與 android:layout_height 定義視圖的寬度和高度,可選值&#xf…

解決 VSCode 中 NVM 配置后無法識別 Node 和 NPM 的問題

在開發中,我們經常需要使用 Node.js 和 NPM 來管理 JavaScript 項目依賴,而 NVM(Node Version Manager)是開發者在本地環境中管理多個 Node.js 版本的得力工具。不過,有時候在 VSCode 中配置完 NVM 后,可能…

BGP分解實驗·23——BGP選路原則之路由器標識

在選路原則需要用到Router-ID做選路決策時,其對等體Router-ID較小的路由將被優選;其中,當路由被反射時,包含起源器ID屬性時,該屬性將代替router-id做比較。 實驗拓撲如下: 實驗通過調整路由器R1和R2的rout…

Linux: 線程同步

目錄 一 前言 二 線程饑餓 三 線程同步 四 條件變量 1. cond ( condition) 2. pthread_cond_wait() : 3. pthread_cond_signal() 五 條件變量的使用 一 前言 在上篇文章Linux : 多線程互斥-CSDN博客我們講解了線程互斥的概念&#xff…

MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句

在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于構 建子查詢條件。以下是具體用法和示例: ??1. 基本語法?? // 判斷是否存在符合條件的記錄 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…

[數據結構]哈希表

目錄 1、哈希表 1.1、概念 1.2、沖突 2、哈希函數設計 3、負載因子調節 4、閉散列 5、開散列/哈希桶(重點掌握) 6、實現哈希桶 6.1、put方法 6.2、HashMap的擴容機制 6.3、get方法 7、HashMap 8、HashSet 8.1、哈希表性能分析 9、hashcod…

VS-Code創建Vue3項目

1 創建工程文件 創建一個做工程項目的文件夾 如:h5vue 2 cmd 進入文件 h5vue 3 輸入如下命令 npm create vuelatest 也可以輸入 npm create vitelatest 4 輸入項目名稱 項目名稱:自已輸入 回車 可以按鍵盤 a (全選) 回車: Playwright…

linux休眠喚醒流程

1、框架 2、休眠流程 應用層通過echo mem > /sys/power/state寫入休眠狀態,給一張大概流程圖 這個操作對應在kernel/power/main.c的state這個attr的store操作 static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, …

Mysql--基礎知識點--93--兩階段提交

1 兩階段提交 以update語句的具體執行過程為例: 具體更新一條記錄 UPDATE t_user SET name ‘xiaolin’ WHERE id 1;的流程如下: 1.執行器負責具體執行,會調用存儲引擎的接口,通過主鍵索引樹搜索獲取 id 1 這一行記錄&#…

Windows 環境下 Apache 配置 WebSocket 支持

目錄 前言1. 基本知識2. 實戰前言 ?? 找工作,來萬碼優才:?? #小程序://萬碼優才/r6rqmzDaXpYkJZF 爬蟲神器,無代碼爬取,就來:bright.cn 原先寫過apache的http配置:Apache httpd-vhosts.conf 配置詳解(附Demo) 1. 基本知識 ?? WebSocket 是 HTTP 的升級協議 客戶…

UMAEA論文閱讀

Preliminaries MMKG為一個五元組G{E, R, A, V, T},其中E、R、A和V分別表示實體集、關系集、屬性集和圖像集。 T?ERE是關系三元組集。 給定兩個MMKG G1 {E1, R1, A1, V1, T1} 和 G2 {E2, R2, A2, V2, T2}, MMEA旨在識別每個實體對(e1…

AIGC-十款知識付費類智能體完整指令直接用(DeepSeek,豆包,千問,Kimi,GPT)

Unity3D特效百例案例項目實戰源碼Android-Unity實戰問題匯總游戲腳本-輔助自動化Android控件全解手冊再戰Android系列Scratch編程案例軟考全系列Unity3D學習專欄藍橋系列AIGC(GPT、DeepSeek、豆包、千問、Kimi)??關于作者 專注于Android/Unity和各種游戲開發技巧,以及各種資…

Qt界面卡住變慢的解決方法

本質原因: 當Qt界面出現卡頓或無響應時,通常是因為主線程(GUI線程)被耗時操作阻塞。 完全忘了。。。 Qt Creater解決方法 1. 定位耗時操作 目標:找到阻塞主線程的代碼段。 方法: 使用QElapsedTimer測量代碼執行時間…

【LangChain4j快速入門】5分鐘用Java玩轉GPT-4o-mini,Spring Boot整合實戰!| 附源碼

【LangChain4j快速入門】5分鐘用Java玩轉GPT-4o-mini,Spring Boot整合實戰! 前言:當Java遇上大模型 在AI浪潮席卷全球的今天,Java開發者如何快速擁抱大語言模型?LangChain4j作為專為Java打造的AI開發框架&#xff0c…

Vue 3 reactive 和 ref 區別及 失去響應性問題

在 Vue 3 中,reactive 和 ref 是實現響應式數據的兩個核心 API,它們的設計目標和使用場景有所不同。以下是兩者的詳細對比: 1. 基本定義與核心功能 特性reactiveref作用創建對象類型的響應式代理(對象、數組、Map 等&#xff09…

第一節:Vben Admin 最新 v5.0初體驗

系列文章目錄 基礎篇 第一節:Vben Admin介紹和初次運行 第二節:Vben Admin 登錄邏輯梳理和對接后端準備 第三節:Vben Admin登錄對接后端login接口 第四節:Vben Admin登錄對接后端getUserInfo接口 第五節:Vben Admin權…

Nginx部署spa單頁面的小bug

沒部署過,都是給后端干的,自己嘗試部署了一個下午終于成功了 我遇到的最大的bug是進入后只有首頁正常顯示 其他頁面全是404,于是問問問才知道,需要這個 location / { try_files $uri $uri/ /index.html; } 讓…

面試算法高頻08-動態規劃-01

動態規劃 遞歸知識要點 遞歸代碼模板:提供遞歸代碼的標準形式public void recur(int level, int param) ,包含終止條件(if (level> MAX_LEVEL))、當前層邏輯處理(process(level, param))、向下一層遞歸…

若依框架前后端分離版部署全流程詳解(本地+服務器+高級配置)

若依框架前后端分離版部署全流程詳解(本地服務器高級配置) 若依(RuoYi)作為一款基于SpringBoot和Vue的權限管理系統,憑借其模塊化設計和開箱即用的特性廣受開發者歡迎。本文將從本地部署、服務器部署、高級配置三個維…

醫療設備預測性維護合規架構:從法規遵循到技術實現的深度解析

在醫療行業數字化轉型加速推進的當下,醫療設備預測性維護已成為提升設備可用性、保障醫療安全的核心技術。然而,該技術的有效落地必須建立在嚴格的合規框架之上。醫療設備直接關乎患者生命健康,其維護過程涉及醫療法規、數據安全、質量管控等…