1. 程式人生 > >Redis為什麼這麼快?

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號樓,但是不知道你具體住在哪裡,於是你們約好