單線程Redis性能為何如此之高?


轉載

Redis的優勢

性能高不僅跟線程模型有關,它有很多原因,主要有如下3點:

  1. 基於內存;
  2. 單線程,但IO多路復用的利用率高;
  3. 數據結構為高性能優化。

下面分別闡述。

Redis的優勢:基於內存

性能高低都是相對的,Redis是基於內存的數據庫,相對的我們拿傳統的基於磁盤的數據庫進行對比,如圖:

其中,Redis數據庫基於內存,分場景如下:

  1. 數據查詢類場景:內存中有全量的數據,可以直接從內存中取得;
  2. 數據寫入類場景:如果配置的是同步持久化,寫入內存的同時,也會寫入磁盤,性能有所降低,但是由於Redis使用的是IO多路復用,同時沒有線程競爭,因此IO利用率很高。
  3. 數據寫入類場景:如果配置的是異步持久化,寫入內存成功,即響應成功,不用等待磁盤的寫入,性能很高。

傳統磁盤數據庫,分場景如下:

  1. 數據查詢類場景:從磁盤中索引數據,查詢並返回響應;
  2. 數據寫入類場景:從將數據寫入磁盤,同時更新磁盤中的索引文件。

以上可以看出:Redis是基於內存的數據庫,大多數操作在內存中完成,內存的IO效率比磁盤要高的多。因此,這是Redis性能高的一個原因。

Redis的優勢:單線程,IO多路復用的IO利用率高

Redis是單線程的,通常如果單線程處理效率不高,都開多線程處理,但是Redis這里為什么反到效率高了呢?

  1. 多線程存在線程競爭,且有鎖的問題,多線程代碼邏輯復雜,復雜的邏輯通常帶來一定的性能損耗;
  2. Redis雖然是單線程,但是它的“I/ O 多路 復 用( multiplexing)”模型的IO利用率很高。

Redis的“I/ O 多路 復 用”是采用的效率最高的epoll模式,單線程卻實現了多客戶端接入,以及高IO利用率。如下圖:

Redis的優勢:數據結構為高性能優化

數據結構的優化主要有以下兩點(篇幅有限,在這里就不展開了):

  1. Redis全程采用了Hash結構,因此存取效率非常高;
  2. 對於數據的存儲內容也進行了壓縮,節省了空間占用,也減少了io帶寬。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM