搜尋
首頁資料庫Redis淺析Redis為什麼快?快在哪裡?

Redis為什麼快? Redis到底快在哪裡?以下這篇文章帶大家分析一下Redis這麼快的原因,希望對大家有幫助!

淺析Redis為什麼快?快在哪裡?

Redis是基於鍵值對(Key-Value)的NoSQL資料庫,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多種資料結構和演算法組成。 Redis也提供了鍵過期,發布訂閱,事務,Lua腳本,哨兵,Cluster等功能。 【相關推薦:Redis影片教學

Redis執行指令的速度非常快,根據官方給的效能可以達到10w qps。那麼本文主要介紹到底Redis快在哪裡,主要有以下幾點:

一、開發語言

現在我們都用高階語言來編程,如Java、python等。也許你會覺得C語言很古老,但它真的很有用,畢竟unix系統就是用C實現的,所以C語言是非常貼近作業系統的語言。 Redis就是用C語言開發的,所以執行會比較快。

另外多說一句,大學生們好好學C,會讓你更好的理解電腦作業系統。別覺得學了高級語言就可以不用關注底層,欠的債總歸要還的。此處推薦一本比較難啃的書《深入理解計算系統》。

二、純記憶體存取

Redis將所有資料放在記憶體中,非資料同步正常運作中,是不需要從磁碟讀取資料的,0次IO。記憶體反應時間大約為100奈秒,這是Redis速度快的重要基礎。先看看CPU的速度:

淺析Redis為什麼快?快在哪裡?

拿我的電腦來說,主頻是3.1G,也就是說每秒可以執行3.1*10^9個指令。所以說CPU看世界是非常非常慢的,記憶體比它慢百倍,磁碟比他慢百萬倍,你說快不快?

借了一張《深入理解電腦系統》的圖,展示了一個典型的記憶體層次結構,在L0層,CPU可以在一個時脈週期存取到,基於SRAM的高速緩存春續期,可以在幾個CPU時鐘週期中存取到,然後是基於DRAM的主存,可以在幾十到幾百個時脈週期中存取到他們。

淺析Redis為什麼快?快在哪裡?

三、單線程

#第一,單執行緒簡化演算法的實現,並發的數據結構實現不但困難且測試也麻煩。第二,單執行緒避免了執行緒切換以及加鎖釋放鎖帶來的消耗,對於服務端開發來說,鎖和執行緒切換通常是效能殺手。當然了,單線也會有它的缺點,也是Redis的惡夢:阻塞。如果執行一個指令太長,那麼會造成其他指令的阻塞,對於Redis是十分致命的,所以Redis是面向快速執行場景的資料庫。

除了Redis之外,Node.js也是單線程,Nginx也是單線程,但他們都是伺服器高效能的典範。

四、非阻塞多路I/O復用機制

#在這之前先要說一下傳統的阻塞I/O是如何運作的:當使用read或write對某一文件描述符(File Descriptor FD)進行讀寫的時候,如果資料沒有收到,那麼該執行緒會被掛起,直到收到資料。

阻塞模型雖然容易理解,但是在需要處理多個客戶端任務的時候,不會使用阻塞模型。

淺析Redis為什麼快?快在哪裡?

I/O多路復用其實是指多個連線的管理可以在同一進程。多路是指網路連接,復用只是同一個線程。在網路服務中,I/O多路復用起的作用是一次把多個連接的事件通知業務代碼處理,處理的方式由業務代碼來決定。

在I/O多工模型中,最重要的函數呼叫就是I/O 多重化函數,該方法能同時監控多個檔案描述子(fd)的讀寫情況,當其中的某些fd可讀/寫時,此方法就會傳回可讀/寫的fd個數。

淺析Redis為什麼快?快在哪裡?

Redis使用epoll作為I/O多路復用技術的實現,再加上Redis自身的事件處理模型將epoll的read、write、close等都轉換成事件,不在網路I/O上浪費過多的時間。實現對多個FD讀寫的監控,提高效能。

淺析Redis為什麼快?快在哪裡?

舉個形象的例子吧。例如一個tcp伺服器處理20個客戶端socket。

A方案:順序處理,如果第一個socket因為網卡讀資料處理慢了,一阻塞後面都玩蛋去。

B方案:每個socket請求都創建一個分身子進程來處理,不說每個進程消耗大量系統資源,光是進程切換就夠操作系統累的了。

C方案(I/O復用模型,epoll):將使用者socket對應的fd註冊進epoll(實際上伺服器和作業系統之間傳遞的不是socket的fd而是fd_set的資料結構) ,然後epoll只告訴哪些需要讀/寫的socket,只需要處理那些活躍的、有變化的socket fd的就好了。

這樣,整個過程只會在呼叫epoll的時候才會阻塞,收發客戶訊息是不會阻塞的。

更多程式相關知識,請造訪:程式設計入門! !

以上是淺析Redis為什麼快?快在哪裡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
REDIS與SQL數據庫:關鍵差異REDIS與SQL數據庫:關鍵差異Apr 25, 2025 am 12:02 AM

Redis和SQL數據庫的主要區別在於:Redis是內存數據庫,適用於高性能和靈活性需求;SQL數據庫是關係型數據庫,適用於復雜查詢和數據一致性需求。具體來說,1)Redis提供高速數據訪問和緩存服務,支持多種數據類型,適用於緩存和實時數據處理;2)SQL數據庫通過表格結構管理數據,支持複雜查詢和事務處理,適用於電商和金融系統等需要數據一致性的場景。

REDIS:它如何充當數據存儲和服務REDIS:它如何充當數據存儲和服務Apr 24, 2025 am 12:08 AM

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

REDIS與其他數據庫:比較分析REDIS與其他數據庫:比較分析Apr 23, 2025 am 12:16 AM

Redis與其他數據庫相比,具有以下獨特優勢:1)速度極快,讀寫操作通常在微秒級別;2)支持豐富的數據結構和操作;3)靈活的使用場景,如緩存、計數器和發布訂閱。選擇Redis還是其他數據庫需根據具體需求和場景,Redis在高性能、低延遲應用中表現出色。

REDIS的角色:探索數據存儲和管理功能REDIS的角色:探索數據存儲和管理功能Apr 22, 2025 am 12:10 AM

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

REDIS:了解NOSQL概念REDIS:了解NOSQL概念Apr 21, 2025 am 12:04 AM

Redis是一種NoSQL數據庫,適用於大規模數據的高效存儲和訪問。 1.Redis是開源的內存數據結構存儲系統,支持多種數據結構。 2.它提供極快的讀寫速度,適合緩存、會話管理等。 3.Redis支持持久化,通過RDB和AOF方式確保數據安全。 4.使用示例包括基本的鍵值對操作和高級的集合去重功能。 5.常見錯誤包括連接問題、數據類型不匹配和內存溢出,需注意調試。 6.性能優化建議包括選擇合適的數據結構和設置內存淘汰策略。

REDIS:現實世界的用例和示例REDIS:現實世界的用例和示例Apr 20, 2025 am 12:06 AM

Redis在現實世界中的應用包括:1.作為緩存系統加速數據庫查詢,2.存儲Web應用的會話數據,3.實現實時排行榜,4.作為消息隊列簡化消息傳遞。 Redis的多功能性和高性能使其在這些場景中大放異彩。

REDIS:探索其功能和功能REDIS:探索其功能和功能Apr 19, 2025 am 12:04 AM

Redis脫穎而出是因為其高速、多功能性和豐富的數據結構。 1)Redis支持字符串、列表、集合、散列和有序集合等數據結構。 2)它通過內存存儲數據,支持RDB和AOF持久化。 3)從Redis6.0開始引入多線程處理I/O操作,提升了高並發場景下的性能。

Redis是SQL還是NOSQL數據庫?答案解釋了Redis是SQL還是NOSQL數據庫?答案解釋了Apr 18, 2025 am 12:11 AM

RedisisclassifiedasaNoSQLdatabasebecauseitusesakey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.Itoffersspeedandflexibility,makingitidealforreal-timeapplicationsandcaching,butitmaynotbesuitableforscenariosrequiringstrictdataintegrityo

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境