redis核心面試題一(架構原理+RDB+AOF)

文章目錄

  • 0. redis與mysql區別
  • 1. redis是單線程架構還是多線程架構
  • 2. redis單線程為什么這么快
  • 3. redis過期key刪除策略
  • 4. redis主從復制架構原理
  • 5. redis哨兵模式架構原理
  • 6. redis高可用集群架構原理
  • 7. redis持久化之RDB
  • 8. redis持久化之AOF
  • 9. redis持久化之混合持久化

0. redis與mysql區別

1.數據庫類型MySQL是關系型數據庫Redis是緩存數據庫(非關系型數據庫)
2.數據存放位置MySQL:數據存放在磁盤中Redis:數據存放在內存中
3.支持數據類型MySQL:數值、日期/時間、字符串Redis:String、Hash、List、Set、Zset

1. redis是單線程架構還是多線程架構

redis6.0版本之前是單線程,這里的單線程指的是網絡IO和鍵值對讀寫命令是由一個線程完成的
redis6.0版本之前之后是多線程,這里的多線程指的是在網絡IO請求過程中采用了多線程,但是鍵值對讀寫命令仍然是單線程的,并且持久化、集群數據同步、異步刪除都是由額外的線程完成的。

所以redis仍然是線程安全的

2. redis單線程為什么這么快

  1. 命令執行基于內存操作,單條命令操作時間是幾十納秒

  2. 命令執行是單線程操作,避免了多線程上下文切換開銷

  3. 高效的數據結構,包括全局Hash表、簡單動態字符串、雙向鏈表、跳躍表、整數數組

  4. 基于IO多路復用技術,能夠保證大量并發下的效率,提高系統的吞吐量

在這里插入圖片描述

3. redis過期key刪除策略

1.惰性刪除:	key達到過期時間,不會被立即刪除,只有當讀寫到這個已經過期的key時,才會觸發惰性刪除策略刪除該key2.定時刪除:	由于惰性刪除策略無法保證冷數據被及時刪掉,所以Redis會定期(默認每100ms)主動淘汰一批已過期的key,這里的一批只是部分過期key,所以可能會出現部分key已經過期但仍然還沒有被清理掉的情況3.主動刪除:	當redis已用內存超過maxmemory限定時,觸發主動清理策略,共8種內存淘汰策略
a)針對設置了過期時間的key1. volatile-ttl:	在設置了過期時間的鍵值對,根據過期時間的先后進行刪除,越早過期的越先被刪除。2. volatile-random:	在設置了過期時間的鍵值對,進行隨機刪除。3. volatile-lru:	會使用LRU算法篩選設置了過期時間的鍵值對刪除。4. volatile-lfu:	會使用LFU算法篩選設置了過期時間的鍵值對刪除。b)針對所有的key5. allkeys-random:	從所有鍵值對中隨機選擇并刪除數據。6. allkeys-lru:		使用LRU算法在所有數據中進行篩選刪除。7. allkys-lfu:		使用LFU算法在所有數據中進行篩選刪除。c)不處理8. noeviction:不會剔除任何數據,拒絕所有寫入操作并返回客戶端錯誤信息,此時Redis只響應讀操作。LRU算法(Least Recently Used,最近最久未使用):		 淘汰很久沒被訪問過的數據,以最近-次訪問時間作為參考
LFU算法(Least Frequently Used,最不經常使用):		淘汰最近一段時間被訪問次數最少的數據,以次數作為參考
絕大多數情況我們都可以用LRU策略,當存在大量的熱點緩存數據時,LFU可能更好點

4. redis主從復制架構原理

常見的主從復制架構:總體來說,主數據庫Master以寫為主,從數據庫Slave以讀為主,整體負責讀寫分離、容災恢復。

case1:一主二仆【中心化架構】 slaveof 新主庫IP 新主庫端口

case2:薪火相傳【去中心化架構】 slaveof 新主庫IP 新主庫端口

case3:反客為主 slaveof no one

// 主從數據庫數據同步過程
1.全量復制:【當主從服務器剛建立連接的時候,進行全量數據同步】a、首先從服務器連接到主服務器,發送psync命令進行數據全量同步(Redis2.8之前是sync命令)b、主服務器收到psync命令之后,執行bgsave命令生成RDB快照文件發送給從服務器c、從服務器收到RDB快照文件后,清空內存舊數據,將接收到的數據寫入磁盤2、增量復制:【全量復制結束后,進行增量復制】a、主服務器每執行一個寫命令就會向從服務器發送相同的寫命令b、從服務器接收并執行收到的寫命令。優點:(1)數據熱備份:主從復制實現了數據的熱備份,是持久化之外的一種數據冗余方式。(2)故障恢復:	如果master宕掉了,哨兵模式可以提升一個新的master,實現故障轉移,達到高可用。(3)負載均衡:	可以輕易實現橫向擴展,實現讀寫分離,一個master用于寫,多個slave 用于分攤讀的壓力缺點:(1)網絡延遲:由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave服務器有一定的延遲(2)如果master宕掉了,普通主從模式無法自動切換master,必須使用哨兵模式

5. redis哨兵模式架構原理

優點:可以動態切換主從庫,中心型公司首選

缺點:

  1. 單個master主節點提供寫服務,redis存儲的數據有限(<10G),并發量不足(<3w)
  2. 自動切換主從庫會產生訪問瞬斷的情況,切換沒有那么快

在這里插入圖片描述

工作原理:

	哨兵是一個分布式系統,可以在一個架構中運行多個哨兵進程,這些進程使用流言協議(gossip protocols)來傳播Master是否下線的信息,并使用投票協議(agreement protocols)來決定是否執行自動故障遷移以及選擇哪個Slave作為新的Master。哨兵模式的簡單工作原理如下:
(1)監控:哨兵會不斷地檢查你的MasterSlave是否運作正常。
(2)提醒:當被監控的某個Redis節點出現問題時,哨兵可以通過 API 向管理員或者其他應用程序發送通知。
(3)自動故障遷移:當Master不能正常工作時,哨兵會進行自動故障遷移操作,將其中一個Slave升級為新的Master  

6. redis高可用集群架構原理

  1. redis集群是一個由多個主從節點群組成的分布式服務器群,它具有復制、高可用和分片存儲特性

  2. redis集群將每個節點設置成集群模式,這種集群模式沒有中心節點,可水平擴展,可線性擴展到上萬個節點(官方推薦不超過1000個節點)

  3. redis集群的性能和高可用性均優于之前版本的哨兵模式,且集群配置非常簡單。

    大型公司首選

在這里插入圖片描述

7. redis持久化之RDB

RDB(Redis DataBase)在指定的時間間隔內將內存中的數據集快照寫入磁盤,也就是行話講的Snapshot快照,它恢復時將快照文件 (dump.rdb) 移動到redis安裝目錄并啟動服務即可。

save 3600 1		# 15分鐘變動1次
save 300 100	# 5分鐘變動100次
save 60 10000	# 1分鐘變動1w次save				save時只管保存,其它不管,全部阻塞。
bgsave			Redis會在后臺異步進行快照操作, 快照同時還可以響應客戶端請求。

在這里插入圖片描述

RDB優點:1、持久化速度快:RDB在保存RDB文件時父進程唯一需要做的就是fork出一個子進程,接下來的工作全部由子進程來做,父進程不需要再做其他I0操作,所以RDB持久化方式可以最大化redis的性能。[適合大規模的數據持久化]2、恢復速度快:與AOF相比,RDB是一個非常緊湊的文件,RDB數據恢復會更快一些RDB缺點:1、內存膨脹:Fork的作用是復制一個與當前進程一樣的進程,新進程的所有數據(變量、環境變量、程序計數器等)數值都和原進程一致,大致2倍的膨脹性需要考慮。2、數據丟失:在一定間隔時間做一次備份,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改

8. redis持久化之AOF

AOF(Append Only File)是以日志的形式來記錄每個寫操作,將Redis執行過的所有寫指令記錄下來(讀操作不記錄),只許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構建數據,換言之,redis 重啟的話就根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。

AOF配置【APPEND ONLY MODE】
appendonly no  										# 默認no
appendfilename "appendonly.aof" 	# 文件名
appendfsync [always/everysec/no]always		同步持久化,redis每次發生數據改變都會被立即記錄到磁盤,性能較差但數據完整性最好everysec		默認推薦,異步操作,每秒記錄一次,最多損失1s的數據no			不進行持久化
no-appendfsync-on-rewrite no 				# 重寫時是否運用appendfsync,默認no即可,保證數據安全性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
AOF優點:每修改同步:appendfsync always 同步持久化 每次發生數據變更會被立即記錄到磁盤,性能較差但數據完整性比較好每秒同步:appendfsync everysec 異步操作,每秒記錄 如果一秒內宕機,有數據丟失不同步:appendfsync no 從不同步AOF缺點:1、文件大、恢復慢:相同數據集的數據而言aof文件要遠大于rdb文件,恢復速度慢于rdb2Aof運行效率要慢于rdb,每秒同步策略效率較好,不同步效率和rdb相同

在這里插入圖片描述

redis默認使用AOF恢復數據,因為aof保存的數據更全面

9. redis持久化之混合持久化

背景:

  1. 重啟Redis時,我們很少只使用RDB來恢復內存數據,因為這會丟失大量數據
  2. 通常使用AOF日志重放來恢復數據,但是重放AOF日志性能相對RDB來說要慢很多,當Redis數據很大,啟動需要花費很長的時間
    Redis 4.0為了解決這個問題,帶來了一個新的持久化選項一混合持久化
實現步驟:
步驟一:通過如下配置可以開啟混合持久化(必須先開啟aof):aof-use-rdb-preamble yes步驟二:此時AOF在重寫時,不再是單純將內存數據轉換為RESP命令寫入AOF文件,而是將重寫這一刻之前的內存做RDB
快照處理,并且將RDB快照內容和增量的AOF修改內存數據的命令存在一起,都寫入新的AOF文件步驟三:新的文件一開始不叫appendonly.aof,等到重寫完新的AOF文件才會進行改名,覆蓋原有的AOF文件,完成新舊兩個AOF文件的替換。步驟四:redis重啟的時候,可以先加載RDB的內容,然后再重放增量AOF日志就可以完全替代之前的AOF全量文件重放,因此重啟效率大幅得到提升。

在這里插入圖片描述

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

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

相關文章

窮人如何翻身賺錢?不妨試試這5個冷門生意,干好了,收入相當不錯

根據統計數據&#xff0c;我國月收入超過3000元的人口已超過4億&#xff0c;這意味著仍有約10億人的月收入低于3000元。正因為如此&#xff0c;網絡上許多人都自嘲為“窮人”。 然而&#xff0c;窮人真的無法改變自己的命運嗎&#xff1f;并非如此。對于渴望賺錢的窮人來說&am…

gpt2使用ggml推理

gpt2使用ggml推理 ggml/examples/gpt-2/main-backend.cpp : #include "ggml/ggml.h" #include "ggml/ggml-alloc.h" #include "ggml/ggml-backend.h"#ifdef GGML_USE_CUDA #include "ggml-cuda.h" #endif#ifdef GGML_USE_METAL #inc…

傳統藍牙模塊BR/EDR與低功耗藍牙模塊有什么區別?

傳統藍牙模塊BR/EDR與低功耗藍牙模塊有什么區別&#xff1f;下面跟隨美迅物聯網MesoonRF從多個維度來了解。   概述&#xff1a;低功耗藍牙采用了高斯頻移鍵控&#xff08;GFSK&#xff09;。這里我們先拋開藍牙的協議&#xff0c;單純從Radio的角度看收發通信&#xff0c;Ra…

【Crypto】Url編碼

文章目錄 Url編碼解題感悟 Url編碼 Url編碼 搞定 小小flag&#xff0c;拿下&#xff01; 解題感悟 有點餓了…

day 1: 738. 單調遞增的數字

738. 單調遞增的數字 當且僅當每個相鄰位數上的數字 x 和 y 滿足 x < y 時&#xff0c;我們稱這個整數是單調遞增的。 給定一個整數 n &#xff0c;返回 小于或等于 n 的最大數字&#xff0c;且數字呈 單調遞增 。 示例1&#xff1a; 輸入&#xff1a;n 10 輸出&#xff1a…

圖數據庫助力供應鏈柔性升級

導讀 當今市場環境受短視頻等流媒體影響&#xff0c;任何風險事件在社交網絡中傳播速度極其迅速&#xff0c;留給企業的反應時間按分秒計&#xff0c;傳統供應鏈的年度計劃面對劇烈變化的市場環境已失去意義。此外&#xff0c;受近年局勢動蕩的影響&#xff0c;市場需求和供應…

APISIX-簡單使用

APISIX-簡單使用 這個工具還是很不錯的&#xff0c;可視化的配置很清晰 &#xff0c; 想用NGINX的配置模式也是可以的&#xff0c;就是要去修改配置文件了。 APISIX&#xff0c;一個很不錯的可視化工具&#xff0c;用來代替Nginx相當不錯&#xff0c;可作為Nginx的平替方案&…

【Python進階】主流電商平臺數據分析||數據采集返回商品詳情主題鏈接主圖SKU數據

Python是一種高級編程語言&#xff0c;廣泛應用于軟件開發、數據分析、人工智能、科學計算等領域。在軟件開發方面&#xff0c;Python在網站開發、網絡編程、桌面軟件開發等方面有著廣泛的應用。在數據分析和人工智能領域&#xff0c;Python的各種庫如NumPy、Pandas、Matplotli…

守護者:ThingsBoard物聯網網關在溫室環境監測中的應用

系統設計 智慧農業溫室大棚系統由傳感器及執行設備、數據傳輸網關、智慧農業溫室大棚管理平臺組成。 系統支持實時采集溫室大棚內的空氣溫濕度、土壤溫濕度、光照和二氧化碳等環境參數&#xff0c;根據農作物的生長需求自動控制溫室中電器設備的啟停&#xff0c;從而達到植物生…

中移物聯OneMO Cat.1模組推動聯網POS規模應用

在第三方支付蓬勃發展和消費模式不斷革新的時代背景下&#xff0c;新型聯網POS終端以其智能化、便捷化的特點豐富人們生活便利度。在這一變革浪潮中&#xff0c;中移物聯OneMO Cat.1模組ML307R憑借其卓越的性能和成本效益&#xff0c;成為推動聯網POS規模應用的重要力量。 性能…

DHCP 動態分配概述

DHCP 動態分配概述 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;動態主機配置協議&#xff09;是一種網絡協議&#xff0c;用于自動分配IP地址和其他網絡配置參數&#xff08;如子網掩碼、默認網關、DNS服務器&#xff09;給網絡中的設備。這簡化了網絡管…

【Linux】信號集及信號集操作函數

文章目錄 一、信號集是什么&#xff1f;二、信號集操作函數1. sigemptyset2. sigfillset3. sigaddset4. sigdelset5. sigismember6. sigprocmask (僅用于讀取或更改block表)7. sigpending (僅用于讀取pending表) 一、信號集是什么&#xff1f; 對于每個進程, 都有三個信號集, …

k8s集群部署成功后某個節點突然出現notready狀態解決辦法

通過&#xff1a; kubectl get nodes 查看master1節點為not ready 通過查看日志&#xff1a; journalctl -f -u kubelet.service 看到這里 查看狀態&#xff1a; systemctl status kubelet.service 重啟一樣會報錯 執行&#xff1a; swapoff -a 執行后&#xff0c;重啟…

pytorch深度學習-環境搭建

1.Anaconda下載&#xff08;首先安裝Anaconda不需要先安裝Python了&#xff01;&#xff09; 版本 3.11. Download Anaconda Distribution | Anaconda 1.2 跳過注冊直接下載 2.安裝 直接next, (Install for 可以選擇All Users&#xff0c;我選擇的是All Users) 點擊默認選項…

Qt Designer 使用筆記

目錄 qt designer安裝 預覽 Ctrl R 使用 Qt Designer 設計的ui文件可以通過以下命令轉為.py文件 命令行腳本&#xff1a; pycharm工具欄配置&#xff1b; pyqt5也是可以的&#xff1a; 2.2 測試是否配置成功 設置背景顏色&#xff1a; ui收集 qt designer安裝 pip ins…

高耗能工廠實現ESG能源管控的策略與實踐探討-天拓四方

隨著全球氣候變化的加劇和ESG&#xff08;環境、社會和治理&#xff09;理念的普及&#xff0c;高耗能工廠面臨著巨大的挑戰和機遇。如何有效地實現ESG能源管控&#xff0c;不僅關乎企業的可持續發展&#xff0c;也是應對全球環境問題的關鍵一環。本文將探討高耗能工廠實現ESG能…

JavaEE-網絡初識

文章目錄 一、網絡背景1.1 起源1.2 國內網絡的發展 二、關鍵概念2.1 網絡2.2 設備2.3 ip地址與端口號 三、協議3.1 協議分層3.2 OSI七層模型3.3 TCP/IP五層模型3.4 數據傳輸過程的簡單敘述 一、網絡背景 1.1 起源 在國外大概時上世紀70年代左右&#xff0c;網絡就出現了&…

U-Mail郵件系統取得多項適配認證,全面支持國產化信創環境

隨著信息技術的發展&#xff0c;信息化建設越來越深入到社會各個領域&#xff0c;成為驅動經濟社會發展的重要力量。在此背景下&#xff0c;我國正加快構建國家信息安全保障體系&#xff0c;實現自主可控&#xff0c;形成安全可靠的信息技術體系。這正是我們所說的“信創”&…

Linux中經典的并發編程問題生產者和消費者

一&#xff0c;進程和線程區別 1&#xff0c;進程是程序的一次執行實例&#xff0c;是系統進行資源分配和調度的獨立單位。進程具有獨立的內存空間、系統資源以及獨立的執行序列。每個進程都有其獨立的進程控制塊&#xff08;PCB&#xff09;&#xff0c;用于描述進程的狀態和…

Flutter 中的 TabBarView 小部件:全面指南

Flutter 中的 TabBarView 小部件&#xff1a;全面指南 在Flutter中&#xff0c;TabBarView是一個用于創建選項卡式界面的小部件&#xff0c;它與TabController一起使用&#xff0c;可以構建復雜的選項卡導航界面。本文將為您提供一個全面的指南&#xff0c;幫助您了解如何使用…