Redis為什麼這麼快?
今天我在一個技術群裡提出一個問題:Redis為什麼這麼快,Redis的那些特效能夠支援了它的高併發?
之前的我,也只是知道Redis是記憶體資料庫,所以讀取速度快;IO使用的是多路複用,使用一個執行緒來輪詢描述符,減少了執行緒上下文的切換,將資料庫的開、關、讀、寫都轉化成了時間,所以IO時也有加速。雖然理解上就是這些(當然還有一些資料結構的原因,全程使用hash結構,加速讀寫)
突然想寫下來,供大家看一下,也想請大神批評指正一下。
Redis的高併發和快速原因很多,總結一下幾點:
1. Redis是純記憶體資料庫,一般都是簡單的存取操作,執行緒佔用的時間很多,時間的花費主要集中在IO上,所以讀取速度快。
2. 再說一下IO,Redis使用的是非阻塞IO,IO多路複用,使用了單執行緒來輪詢描述符,將資料庫的開、關、讀、寫都轉換成了事件,減少了執行緒切換時上下文的切換和競爭。
3. Redis採用了單執行緒的模型,保證了每個操作的原子性,也減少了執行緒的上下文切換和競爭。
4. 另外,資料結構也幫了不少忙,Redis全程使用hash結構,讀取速度快,還有一些特殊的資料結構,對資料儲存進行了優化,如壓縮表,對短資料進行壓縮儲存,再如,跳錶,使用有序的資料結構加快讀取的速度。
5. 還有一點,Redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。
最後,附兩張圖,讓大家更加深刻的理解Redis的架構和記憶體模型:
Redis的工作流程圖
相關推薦
Redis 是單執行緒的,為什麼這麼快?
近乎所有與Java相關的面試都會問到快取的問題,基礎一點的會問到什麼是“二八定律”、什麼是“熱資料和冷資料”,複雜一點的會問到快取雪崩、快取穿透、快取預熱、快取更新、快取降級等問題,這些看似不常見的概念,都與我們的快取伺服器相關,一般常用的快取伺服器有Redis、Memcached等,而筆者目前最常
Redis為何這麼快——資料儲存角度
一、簡介和應用 Redis是一個由ANSI C語言編寫,效能優秀、支援網路、可持久化的K-K記憶體資料庫,並提供多種語言的API。它常用的型別主要是 String、List、Hash、Set、ZSet 這5種 Redis在網際網路公司一般有以下
為什麼說Redis是單執行緒的以及Redis為什麼這麼快?
一、前言 近乎所有與Java相關的面試都會問到快取的問題,基礎一點的會問到什麼是“二八定律”、什麼是“熱資料和冷資料”,複雜一點的會問到快取雪崩、快取穿透、快取預熱、快取更新、快取降級等問題,這些看似不常見的概念,都與我們的快取伺服器相關,一般常用的快取伺服器有Redis、Memcached等,而筆者目
Redis簡介(二)------為什麼Redis快取速度這麼快
首先介紹下硬碟資料庫和Redis的工作模式 一、硬碟資料庫的工作模式: 需要先從資料讀取資料到記憶體,記憶體中的資料儲存到硬碟,我們更改硬碟的資料後在儲存到資料庫。這裡的步驟較多,而且還佔用我們的硬碟容量。 二、記憶體資料庫的工作模式: 這種方式相比硬碟資料庫
redis面試題集錦 Redis為什麼使用單程序單執行緒方式也這麼快
1為什麼Redis需要把所有資料放到記憶體中? Redis為了達到最快的讀寫速度將資料都讀到記憶體中,並通過非同步的方式將資料寫入磁碟。所以Redis具有快速和資料持久化的特性。如果不將資料放到記憶體中,磁碟的I/O速度會嚴重影響redis的效能。在記憶體越來越便宜的今天,redis將會越來越受歡迎。如果設
Redis 為什麼這麼快?
作者:我叫劉半仙 來源:my.oschina.net/liughDevelop/blog/2236771 本文內容思維導圖如下: 1 簡介和應用 Redis是一個由ANSI C語言編寫,效能優秀、支援網路、可持久化的K-K記憶體資料庫,並提供
Redis為什麼這麼快?
今天我在一個技術群裡提出一個問題:Redis為什麼這麼快,Redis的那些特效能夠支援了它的高併發? 之前的我,也只是知道Redis是記憶體資料庫,所以讀取速度快;IO使用的是多路複用,使用一
redis為什麼可以這麼快?
今天我在一個技術群裡提出一個問題:Redis為什麼這麼快,Redis的那些特效能夠支援了它的高併發?之前的我,也只是知道Redis是記憶體資料庫,所以讀取速度快;IO使用的是多路複用(多路網路連線複用一個IO執行緒),使用一個執行緒來輪詢描述符,減少了執行緒上下文的切換,將資
為什麼redis是單執行緒的以及為什麼這麼快?
### 官網的說法 ![](https://img2020.cnblogs.com/blog/1534147/202004/1534147-20200427212506756-1345118511.png) 我們先來認真看一下官網的說法。翻譯過來大意如下: CPU並不是您使用Redis的瓶頸,因為通常Redi
硬核!15張圖解Redis為什麼這麼快
作為一名服務端工程師,工作中你肯定和 Redis 打過交道。Redis 為什麼快,這點想必你也知道,至少為了面試也做過準備。很多人知道 Redis 快僅僅因為它是基於記憶體實現的,對於其它原因倒是模稜兩可。 那麼今天就和小萊一起看看: 圖注:- 思維導圖 - 基
Redis為什麼這麼快
# 前言 ```properties 本篇部落格已被收錄GitHub:https://zhouwenxing.github.io/ ``` 在日常開發中,為了保證資料的一致性,我們一般都選擇關係型資料庫來儲存資料,如 `MySQL`,`Oracle` 等,因為關係型資料庫有著事務的特性。然而在併發量比較大的業
Kafka中topic的Partition,Kafka為什麼這麼快 Consumer的負載均衡及consumerGrou
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
高效能佇列disruptor為什麼這麼快?
背景 Disruptor是LMAX開發的一個高效能佇列,研發的初衷是解決記憶體佇列的延遲問題(在效能測試中發現竟然與I/O操作處於同樣的數量級)。基於Disruptor開發的系統單執行緒能支撐每秒600萬訂單,2010年在QCon演講後,獲得了業界關注。2011年,企業應用軟體專家Martin Fowler
為什麼TeamViewer可以拷貝的這麼快
Sorry about the length, it's kinda necessary. Introduction I'm developing a remote desktop software (just for fun) in C# 4.0 for Windows Vista/
剖析Disruptor:為什麼會這麼快?(三)揭祕記憶體屏障
譯者:杜建雄 校對:歐振聰 最近我部落格文章更新有點慢,因為我在忙著寫一篇介紹記憶體屏障(Memory Barries)以及如何將其應用於Disruptor的文章。問題是,無論我翻閱了多少資料,向耐心的Martin和Mike請教了多少遍,以試圖理清一些知識點,可我總是不能直觀地抓到重
剖析Disruptor:為什麼會這麼快?(一)Ringbuffer的特別之處
作者:Trisha 譯者:寒桐 校對:方騰飛 最近,我們開源了LMAX Disruptor,它是我們的交易系統吞吐量快(LMAX是一個新型的交易平臺,號稱能夠單執行緒每秒處理數百萬的訂單)的關鍵原因。為什麼我們要將其開源?我們意識到對高效能程式設計領域的一些傳統觀點,有點不對勁。我們
剖析Disruptor:為什麼會這麼快?(一)鎖的缺點
作者:Trisha’s 譯者:張文灼,潘曦 整理和校對:方騰飛,丁一 Martin Fowler寫了一篇非常好的文章,裡面不僅提到了Disruptor,而且還解釋了Disruptor 如何應用在LMAX的架構裡。裡面有提及了一些目前沒有涉及的概念,但最經常問到的問題是 “Disrupto
剖析Disruptor:為什麼會這麼快?(二)神奇的快取行填充
作者:Trisha 譯者:方騰飛 校對:丁一 我們經常提到一個短語Mechanical Sympathy,這個短語也是Martin部落格的標題(譯註:Martin Thompson),Mechanical Sympathy講的是底層硬體是如何運作的,以及與其協作而非相悖的程式設計方式。 我
微軟精心打造的Vista系統,為什麼死得這麼快?
Windows 有這麼一個傳統:團隊成員在新的 Windows 系統版本釋出後,會在海報上籤上自己的名字(本圖是一張 DVD)。而當釋出會結束的時候,海報上就會有成百上千個簽名。 經驗是你在需要的時候才會得到的東西。—— Steven Wright 我喜歡讀 Terry Crowley 的部落格(《Vis
epoll為什麼這麼快
epoll是多路複用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上核心,在開始討論這個問題之前,先來解釋一下為什麼需要多路複用IO.以一個生活中的例子來解釋.假設你在大學中讀書,要等待一個朋友來訪,而這個朋友只知道你在A號樓,但是不知道你具體住在哪裡,於是你們約好