【Redis】基本架構

1. 單線程模型

現在開啟了三個redis-cli客戶端同時執行命令。

  • 客戶端1設置一個字符串鍵值對:
127.0.0.1:6379> set hello world
  • 客戶端2對counter做自增操作:
127.0.0.1:6379> incr counter
  • 客戶端3對counter做自增操作:
127.0.0.1:6379> incr counter

我們已經知道從客戶端發送的命令經歷了:發送命令、執行命令、返回結果三個階段,其中我們重點關注第2步。我們所謂的Redis是采用單線程模型執行命令的是指:雖然三個客戶端看起來是同時要求Redis去執行命令的,但微觀角度,這些命令還是采用線性方式去執行的,只是原則上命令的執行順序是不確定的,但一定不會有兩條命令被同步執行,如圖2 - 3、2 - 4、2 - 5所示,可以想象Redis內部只有一個服務窗口,多個客戶端按照它們達到的先后順序被排隊在窗口前,依次接受Redis的服務,所以兩條incr命令無論執行順序,結果一定是2,不會發生并發問題,這個就是Redis的單線程執行模型。

在這里插入圖片描述

在這里插入圖片描述

Redis的單線程模型
在這里插入圖片描述

2. 為什么單線程還能這么快

通常來講,單線程處理能力要比多線程差,例如有10000公斤貨物,每輛車的運載能力是每次200公斤,那么要50次才能完成;但是如果有50輛車,只要安排合理,只需要依次就可以完成任務。那么為什么Redis使用單線程模型會達到每秒萬級別的處理能力呢?可以將其歸結為三點:

  • 純內存訪問:Redis將所有數據放在內存中,內存的響應時長大為約100納秒,這是Redis達到每秒萬級別訪問的重要基礎。
  • 非阻塞IO:Redis使用epoll作為I/O多路復用技術的實現,再加上Redis自身的事件處理模型將epoll中的連接、讀寫、關閉都轉換為事件,不在網絡I/O上浪費過多的時間,如圖2 - 6所示。
  • 單線程避免了線程切換和競態產生的消耗:單線程可以簡化數據結構和算法的實現,讓程序模型更簡單;其次多線程避免了在線程競爭同一份共享數據時帶來的切換和等待消耗。

在這里插入圖片描述

雖然單線程給Redis帶來很多好處,但還是有一個致命的問題:對于單個命令的執行時間都是有要求的。如果某個命令執行過長,會導致其他命令全部處于等待隊列中,遲遲等不到響應,造成客戶端的阻塞,對于Redis這種高性能的服務來說是非常嚴重的,所以Redis是面向快速執行場景的數據庫

鍵的過期機制

一個Redis中可能會同時存在很多很多的key,這些key中有很大一部分都有過期時間,此時Redis如何 GET key是否過期?

Redis的整體策略:

  • 定期刪除
    • 每取一部分驗證過期時間
  • 惰性刪除
    • 發送DEL指令后,服務器端并不會立即刪除,如果再訪問已標記刪除的key,才會刪除,同時返回nil.

Redis中并沒有采取定時器的方式來實現過期key刪除

  • 若有多個key過期,也可以通過一個定時器來高效/節省CPU的前提下處理多個key,(優先級隊列,時間輪)
  • 若是基于定時器實現,就要引入多線程

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

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

相關文章

[yolov11改進系列]基于yolov11的修改檢測頭為自適應特征融合模塊為ASFFHead檢測頭的python源碼+訓練源碼

【自適應空間特征融合模塊ASFF介紹】 ASFF(Adaptive Spatial Feature Fusion)是一種自適應特征融合策略,旨在解決目標檢測中不同尺度特征之間的沖突和不一致性。 ? 基本概念和原理 ASFF通過學習每個尺度特征的自適應融合權重&#xff0c…

機器學習——支持向量機SVM

機器學習——支持向量機 一、介紹1.概述1.1 概念1.2 SVM的優缺點 2.硬間隔2.1 求解間隔2.2 對偶問題 3.軟間隔3.1 松馳變量3.2 對偶問題 4.核函數4.1 概念4.2 常見的核函數 二、代碼實戰1.實驗要求2.具體實現2.1 詞匯表加載2.2 郵件預處理函數2.3詞索引轉換為特征向量2.4 SVM 模…

Python 科學計算有哪些提高運算速度的技巧

在科學計算中提高 Python 運算速度的核心技巧包括:使用 NumPy 向量化操作、利用 Numba 加速函數、調用 C/C 擴展模塊、應用多線程/多進程并行計算、使用 GPU 加速計算。其中,使用 NumPy 向量化是最基礎且見效最快的優化方式。NumPy 利用底層 C 實現高效的…

React+Antd全局加載遮罩工具

下面是全局加載遮罩工具,功能:提供show和showWithDelay/hide方法用于顯示/延時顯示/隱藏遮罩,它還提供loading屬性返回是否正在loading。通常用于耗時較長的操作,比如遠端api調用。 如何用它,下面是個例子&#xff0c…

【機器學習基礎】機器學習入門核心算法:GBDT(Gradient Boosting Decision Tree)

機器學習入門核心算法:GBDT(Gradient Boosting Decision Tree) 1. 算法邏輯2. 算法原理與數學推導2.1 目標函數2.2 負梯度計算2.3 決策樹擬合2.4 葉子權重計算2.5 模型更新 3. 模型評估評估指標防止過擬合 4. 應用案例4.1 金融風控4.2 推薦系…

水墨色調中國風PPT模版分享

水墨色調中國風PPT模版分享:水墨中國風PPT模版https://pan.quark.cn/s/4368c537b1d2 第一套PPT模版?:主題是“愛蓮說”,水墨風格封面。核心視覺是綠色蓮蓬、白鶴、紅色印章,文字有“愛蓮說”等。適用文學或傳統文化類演示。 ?第…

PBX、IP PBX、FXO 、FXS 、VOIP、SIP 的概念解析以及關系

PBX(Private Branch Exchange) 概念 :PBX 是專用交換機,是一種在企業或組織內部使用的電話交換系統。它允許內部用戶之間以及內部用戶與外部公共電話網絡(PSTN)之間進行通信。例如,在一個大型企…

LabVIEW雙光子熒光成像軟件開發

雙光子熒光成像技術在抑郁小鼠腦內丙二醛(MDA)和甲醛(FA)檢測中的軟件開發,基于 LabVIEW 平臺構建從硬件控制、數據采集到圖像處理的全流程系統。結合 5734 FPGA 實現實時圖像處理,突出雙光子成像的深度開發…

OSI模型中的網絡協議

一、電子郵件協議:從SMTP到MIME的擴展 電子郵件系統的核心協議包括SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol)和IMAP(Internet Message Access Protocol),但…

流程自動化引擎:讓業務自己奔跑

在當今競爭激烈的商業環境中,企業面臨著快速變化的市場需求、日益復雜的業務流程以及不斷增長的運營成本。如何優化業務流程、提升效率并降低成本,成為企業持續發展的關鍵問題。 流程自動化引擎(Process Automation Engine)作為一…

DNS解析過程以及使用的協議名稱

DNS(Domain Name System 域名系統)解析是一個分層查詢的過程 1.本地緩存查詢階段 先檢查瀏覽器自身的DNS緩存 接著檢查操作系統的DNS緩存 最后檢查本地 hosts 文件 2.本地DNS服務器查詢階段 先向本地DNS服務器查詢,協議是 DNS over UDP&a…

思澈科技助力Keep Watch Pilot 1:重新定義智能運動手表體驗

——以創新芯片技術,打造長續航、高性能的隨身運動教練 作為智能穿戴領域的核心技術支持者,思澈科技攜手Keep共同推出全新智能運動手表Keep Watch Pilot 1。該產品搭載思澈科技自主研發的SF32LB557芯片,在高性能顯示、超長續航與精準運動監測…

github actions入門指南

GitHub Actions 是 GitHub 提供的持續集成和持續交付(CI/CD)平臺,允許開發者自動化軟件工作流程(如構建、測試、部署)。以下是詳細介紹: 一、核心概念 Workflow(工作流程) 持續集成的…

Pytorch中一些重要的經典操作和簡單講解

Pytorch中一些重要的經典操作和簡單講解: 形狀變換操作 reshape() / view() import torchx torch.randn(2, 3, 4) print(f"原始形狀: {x.shape}")# reshape可以處理非連續張量 y x.reshape(6, 4) print(f"reshape后: {y.shape}")# view要求…

ubuntu下nginx

我用的是ubuntu22 配置文件的準確位置 靜態網頁的存放位置 放大看到在靜態文件部署的配置路徑 該路徑下面有一個default文件查看 針對上圖的解析如下: 找到root /var/www/html 我嘗試把自己的一個index文件設置為默認,復制到/var/www/html下 ctrl加…

Git使用手冊保姆級教程

Git 使用手冊 一、Git 簡介與安裝 什么是Git? ? Git 是一個分布式版本控制系統,用于跟蹤文件變化,支持多人協作開發。 安裝步驟 ? Windows:通過 Git官網 下載安裝包,按默認配置安裝即可。 ? macOS&#xff1a…

k8s Headless Service

Kubernetes 無頭服務(Headless Service)配置與使用場景 1.無頭服務概述 無頭服務(Headless Service)是 Kubernetes 中的一種特殊服務類型,它**不分配集群 IP(ClusterIP),而是直接暴露…

基本面高股息策略

策略概述 一種基于基本面高股息策略的投資策略,主要通過Python在聚寬平臺上實現。該策略的核心思想是通過篩選出具有優質基本面和高股息率的股票進行投資,以期獲得穩定的長期回報。策略包括以下幾個主要步驟: 1. 初始化與參數設置:定義策略的基本參數和回測設置。 2. 每日…

GaussDB資源凍結與解凍:精細化資源管理的實踐與策略

GaussDB資源凍結與解凍:精細化資源管理的實踐與策略 引言 在云計算環境中,數據庫資源的動態調配能力直接影響業務成本與穩定性。華為云GaussDB作為新一代分布式數據庫,通過??資源凍結(Resource Quota Freeze)??與…

設計模式24——訪問者模式

寫文章的初心主要是用來幫助自己快速的回憶這個模式該怎么用,主要是下面的UML圖可以起到大作用,在你學習過一遍以后可能會遺忘,忘記了不要緊,只要看一眼UML圖就能想起來了。同時也請大家多多指教。 訪問者模式(Visito…